SELECT文でasで定義した桁をwhereで使用可能?

このQ&Aのポイント
  • SELECT文でasで定義した桁をwhereで使用することはできますか?エラーが発生するのでしょうか?
  • 質問のSQL文において、ASで定義した桁をWHERE句で使用することはできるのでしょうか?エラーが発生する場合、その原因は何でしょうか?
  • SELECT文において、ASを使用して定義した桁をWHEREで利用することは可能でしょうか?もしエラーが発生する場合、その理由は何でしょうか?
回答を見る
  • ベストアンサー

select文、asで定義した桁をwhereで使用可能?

SELECT ( IF(substring(p.TDATE,1,6) = '200407' ,p.PRICE,999999999) ) as 'MONTH1' from TBL_PRICE p where MONTH1<999999999 ; ↑こんな感じで使いたいのですが、これはエラーに なります(これをそのまんま使用するわけではないので、 このSQL自体へのツッコミはとりあえずいいです) >ERROR 1054: Unknown column 'MONTH1' in 'where clause' asで定義した桁をwhereで使用することはできますか?

  • MySQL
  • 回答数2
  • ありがとう数4

質問者が選んだベストアンサー

  • ベストアンサー
  • potedora
  • ベストアンサー率47% (66/140)
回答No.1

MySQL バージョン 4.1 以降であればサブクエリを使用 して SELECT * FROM ( SELECT ( IF(substring(p.TDATE,1,6) = '200407' ,p.PRICE,999999999) ) as 'MONTH1' from TBL_PRICE p ) where MONTH1<999999999 ; こんな感じでできると思います。

masaboo
質問者

補足

potedora様、ご解答ありがとうございます。 大事なことを書き忘れましたが、 MySQLのバージョンは3.23.58です、すみません。 いろいろ試していたところ、 HAVING句にMONTH1<999999999という記述はOKでした。 HAVINGでは別名を使えて、WHEREでは使えない、 というのは一体どうしてでしょう?? 基本的なことなのでしょうけど…。マニュアルの どこを調べたらその辺の仕様がわかりますか?

その他の回答 (1)

  • potedora
  • ベストアンサー率47% (66/140)
回答No.2

書籍は持ってないのでサイトのマニュアルです。 http://dev.mysql.com/doc/mysql/ja/SELECT.html

参考URL:
http://dev.mysql.com/doc/mysql/ja/SELECT.html
masaboo
質問者

お礼

http://dev.mysql.com/doc/mysql/ja/Problems_with_alias.html ↑ここに記載がありますね。これで、安心して HAVINGを使用することができます。 どうもありがとうございました。

関連するQ&A

  • SELECT文で指定桁数分抽出する方法?

    SQL初心者ではじめて質問させていただきます。 SELECT文でテーブルの1つのカラムから上3桁と下2桁を抽出し、別なテーブルのカラムの上5桁をWhere句に条件を入れて検索はできますか? どなかたお分かりでしたら教えてください。 よろしくお願いします。

  • 【MYSQL】asでリネームしてwhereで使う

    こんな感じで↓ SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name` WHERE `sation_rename` = `帷子ノ辻駅` カラム名をリネームした後、 そのカラム名をWHEREの中に組み込みたいのですが "そんなカラムは無い"とエラーになってしまいます。 as でリネームしたカラム名は WHEREで使うことはできないのでしょうか。

    • ベストアンサー
    • MySQL
  • WHERE条件の最終桁のスペースについて質問です。

    WHERE条件の最終桁のスペースについて質問です。 あるテーブルのカラム(colA)に"1234"というデータがあるときに、 (1)SELECT .... WHERE colA='1234' (2)SELECT .... WHERE colA='1234 '  (1234の後に半角スペース) (3)SELECT .... WHERE colA='1234 ' (1234の後に全角スペース) (4)SELECT .... WHERE colA='12345' を、実行すると、(1)だけOKで、他はNGとなると思い込んでいましたが、 実際は、(2)と(3)も同じように検索されてしまいます。 WHERE条件の最終桁のスペースは無視される? こういうものなのでしょうか? オンラインヘルプ等からは、それらしい情報が見つけられなかったのですが、もしこの辺の情報がわかるサイト等ご存知でしたら教えてください。 ちなみに、 SQL-SERVER2005(照合順序:Japanese_CI_AS) colAは、varchar(20) です。 p.s. 基本中の基本かもしれませんが、いままでずっと勘違いしていたので、過去の納品してきたお客様の件数を考えて恐ろしくなっています。(T.T)

  • [初歩] はじめの2文字を切り取って真偽を判定するWHERE文

    例えば、テーブル:MYTABLE、カラム:CITYに、 横浜市緑区.... 川崎市宮前区... 藤沢市辻堂... …などと登録されているとします。ここで、SQL文で (1) はじめの全角2文字が「横浜」である (2) はじめの全角2文字が「横浜」でない(横浜以外) というWHERE条件をそれぞれ作りたいのですが。phpMyAdminで: (1) SELECT CITY FROM MYTABLE WHERE SUBSTRING( MYTABLE.CITY, 0, 4 ) = '横浜' ) (2) SELECT CITY FROM MYTABLE WHERE SUBSTRING( MYTABLE.CITY, 0, 4 ) != '横浜' ) などと実行してみたら、 #1064 - You have an error in your SQL syntax. Check the manual that corresponds to your MySQL server version for the right syntax to use near ') LIMIT 0, 30' at line 1 などとエラーになります。何が誤っていますでしょうか?

    • ベストアンサー
    • MySQL
  • SELECT文でINを使わずに検索したい

    DBはoracle10gです。 テーブル(A_TBL)は以下の4つのカラムで構成されています。 seq_no(連番),key_1(個人番号),key_2(更新日),status(状態) key_1が同一のレコードは、 最新のレコード(最新とは更新日の大きいレコード)以外のstatusを'0'から'4'にします。 例として実行前と実行後のテーブルは以下のような状態です。 【実行前】 seq_no,key_1,key_2,status 1,001,20080101,1 2,001,20080102,0 3,002,20080101,0 4,003,20080101,0 5,003,20080102,0 6,003,20080103,0 7,004,20080101,0 8,004,20080102,2 【実行後】 seq_no,key_1,key_2,status 1,001,20080101,1 2,001,20080102,0 3,002,20080101,0 4,003,20080101,4 5,003,20080102,4 6,003,20080103,0 7,004,20080101,4 8,004,20080102,2 以下のようなSQLを作成し、更新しようとしました。 update A_TBL set status = '4' where status = '0' and seq_no not in ( select wk2.seq_no from A_TBL wk2, (select max(key_2) as key_2, key_1 as key_1 from A_TBL group by key_1) wk1 where wk2.key_1 = wk1.key_1 and wk2.key_2 = wk1.key_2 and wk2.status = '0' ) このSQLはin句を使っていますが、 in句を使わずに同様の更新を実現することは出来るでしょうか?

  • SQL文のselect文でwhereが使えない。

    皆様始めまして~初歩的な質問かもしれないですが postgresSQLのデータをpsqlコマンドでみるときに whereをつかわずに [xxxxxxx@yyyyyy ~]$ psql -q -c 'select * from employ_kanri' xxxxxx postgres 社員名 | 社員番号 | 勤務先 ------------------------+--------------+---------------------------- 田中 | 200700 | 横浜 と結果はでるのに、 whereを使うと [xxxxxxxx@yyyyy ~]$ psql -q -c 'select * from employ_kanri where 勤務先 = '横浜'' xxxxxx postgres ERROR: column "横浜" does not exist になるのはなぜでしょうか? ちなみにデータベースに入ってwhereコマンドを使うと問題なくできます。。 [xxxxxxx@yyyyyyy ~]$ psql xxxxxx postgres Welcome to psql 7.4.11, the PostgreSQL interactive terminal. Type: \copyright for distribution terms \h for help with SQL commands \? for help on internal slash commands \g or terminate with semicolon to execute query \q to quit xxxxxxx=# select * from employ_kanri where 勤務先 = '横浜'; 社員名 | 社員番号 | 勤務先 ------------------------+--------------+---------------------------- 田中 | 200700 | 横浜 よろしくお願いします

  • mysqlで年と月を別々のカラムに収納しています

    mysql5.1を利用してデータベースを作成しています。 テーブルに年と月を別々で収納しているのですが、 そのテーブルの中のデータから「今月を過ぎていなければ」という条件で抽出したいのですが、 SQLの書き方がわかりません。 私のSQLの基礎の基礎しか教えてもらっておらず、 あとは独学で、現在のレベルはようやく少しサブクエリを書き出した(学びだした)レベルです。 しかもwindows上のNavicat Lite(アプリ)上で書いてる状態です。 自分のイメージ的には下記のような感じなのですが、動きません。 どなたか教えていただけないでしょうか。 よろしくお願いします。 hoge_tblテーブルからBカラムが'hoge'かつ、 hoge_tblテーブル内のYEARカラムとMONTHカラムの値を今月と比較して、 「今月を過ぎていなければ」といった条件を付けたいと考えております。 select A from hoge_tbl where B = 'hoge' and (select date_format(now(),'%Y%m') as NOW) < (select date_format('(select YEAR,MONTH from hoge_tbl )’,'%Y%m') as END)

    • ベストアンサー
    • MySQL
  • SQL where区で(-1)を使用したい

    SQL文のwhere区で(-1)を使用したいのですがどなたかアドバイスお願いします。 SQLをプロシージャにして検索条件を引数で渡そうと考えています。 検索したくない引数には(-1)を入れて渡したいです。 select * from X where X.1 = 'QQQ' and (引数 = -1 or X.2 = 引数) といった感じで、引数で(-1)を渡した場合 (-1 = -1 or X.2 = -1) となりwhere区で使用しない様作成したいと思っています。 この方法ではDATETIME型に対してはエラーとなるため出来ません。 良い方法は無いでしょうか。 よろしくお願いします。

  • 引数について

    すみません・・・。 ACCESSを使用してSQL構文を作成しているのですが 下記のようなテーブルを作成してpriceがnullのものだけ抜き出して ’ヌル値’と表示させたいと思っておりますが 「(tbl3.price,'ヌル値')の関数で使用されている引数の数が正しくない」というエラーとなってしまいます。 こちら原因は何によるものか教えて頂けないでしょうか・・・。 よろしくお願い致します。 id1,name id3,name 1 a     1  300 2 b     2  500 3 c     4  500 4 d     6  1200 5 e     8  1500 6 f     9  1500 7 g     10  10000 8 f 9 h 10 i select tbl1.id ,name ,price ,isnull(tbl3.price,'ヌル値') from tbl1 LEFT JOIN tbl3 ON tbl1.id=tbl3.id where price is null

  • SQL サブクエリで抽出したカラムについて

    サブクエリで抽出したカラムを 本クエリでの結果と一緒に表示したいのですが どのように実現してよいかわからず困っております。 詳細としては、下記のようなことをしたいと考えております。 文中の1)と2)は文章下部にあるSQLを指しております ----------------------------------------------------------- 最初は、1)のように凄く単純なSQLでよかったのですが 仕様が変わり、TBL2で取得した新しいカラムも一緒に 本クエリでの結果として取得できれば、SQLを2回実行せずに済むなと考えたのですが、 2)のように色々と試行錯誤したのですが、実現できません。 (2)は単なる空想ですが…) そこで、わかる方にお伺いしたいのですが、 副問い合わせで取得した複数カラムの中の1つのカラム【2)でいうところのTBL2.X】 を 2)のように"select TBL1.A , TBL2.X"として、結果を得ることは可能でしょうか。 ただし、 TBL1のカラムAは、TBL2に存在しない TBL2のカラムXは、TBL1には存在しない カラムBは、TBL1、TBL2に存在する の条件となっております 環境はMysqlです テーブル結合の方法も考えたのですが、 TBL2で、日付でソートし、その上位100件だけを 持ってきたいと思ったので、副問い合わせで一気に抽出しようとこの方法を考えまし た お分かりになる方がいらっしゃいましたらよろしくお願いします 1)SQL ------------ select TBL1.A from TBL1 where TBL1.B in ( select TBL2.B from TBL2 where 条件 ) 2)想像SQL(こんな感じの事をしたい) -------------- select TBL1.A , TBL2.X from TBL1 where TBL1.B in ( select TBL2.B , TBL2.X from TBL2 where 条件 order by TBL2.日付 desc limit 100 )

    • ベストアンサー
    • MySQL