• ベストアンサー

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

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

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

  • ベストアンサー
  • Siegrune
  • ベストアンサー率35% (316/895)
回答No.5

MYSQLを使う環境がないので、 以下のようにちゃんとなっているかどうかまではわかりませんが。 一般にSQLでは、 where句の中は、select句でasを使ってつけた名前は使えませんし、 having句の中は、select句でasを使ってつけた名前があればそれしか使えません。 ということで、having句で試してみられては? (但し、インデックスは使えませんので処理が遅いことを前提としてください。) ま、大抵の要件では、レスポンスが大幅に悪くなっていいから、concatした結果を検索したい ということはないはずですが。 例えば、住所1、住所2、住所3と項目があってどの項目にどこまで入っているかわからない (住所1に都道府県までか、都道府県+市区郡までか、さらに町村まで入っているかわからない) とかいうのなら、住所1、住所2、住所3をconcatしてその結果で検索せざるえないですが。

yuzuru0024
質問者

お礼

回答ありがとうございます。 having句での記述を試してみます。

全文を見る
すると、全ての回答が全文表示されます。

その他の回答 (4)

回答No.4

No.3さんに補足 `sation_rename` = `帷子ノ辻` これは、 `sation_name` = `帷子ノ辻` これの間違いですね。 No.3さんも言ってますが、 駅をつけてWhereする必要ってあるのでしょうか?

yuzuru0024
質問者

お礼

回答ありがとうございます。 駅名部分が、正規性があまりよろしくなく LIKEを使うにしても ◯◯駅まで入ってると、ひっかからなくなってしまうんです。

全文を見る
すると、全ての回答が全文表示されます。
  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.3

どうでもいいかもしれませんが SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name` WHERE `sation_rename` = '帷子ノ辻' でよいのでは? concatしたフィールドで検索をかけるとインデックスがうまく 利かないような・・・・

yuzuru0024
質問者

お礼

回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
回答No.2

No.1さんに補足。 基本的に、ASでリネームした名前は、WHERE以降では使えません。 WHEREで指定できる名前はFROM以降で呼ばれた物だけです。 ですので、No.1さんのやり方でクエリーを書いてください。

yuzuru0024
質問者

お礼

回答ありがとうございます。

全文を見る
すると、全ての回答が全文表示されます。
  • o_chi_chi
  • ベストアンサー率45% (131/287)
回答No.1

下記のようにすればどうでしょう --- SELECT * FROM (SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name`) WHERE `sation_rename` = `帷子ノ辻駅

yuzuru0024
質問者

お礼

回答ありがとうございます。 サブクエリか抽出したrenameは WHERE内に使えるんですか。

全文を見る
すると、全ての回答が全文表示されます。

関連するQ&A

  • まったく別のテーブルの結果MYSQL

    table_1 id name age table_2 id book title city day SELECT * FROM table_1 WHERE id=? SELECT book,title FROM table_2 WHERE city=? このようにまったく別のテーブル カラム数も違う WHEREの?も違う これを一つのSQL文にまとめたいのですが。 UNIONなどを使ってもうまくいきませんでした。 ご教授お願いいたします。

    • ベストアンサー
    • MySQL
  • MySQLで検索されたフィールド

    いつもお世話になっております。 MySQLで以下のようなSQL文を発行しています。 select * from table where (INSTR(`table`.`name`,'キーワード')<>0 OR INSTR(`table`.`keyword`,'キーワード')<>0) nameカラムとkeywordカラムのどちらのカラムから検索されたのか知りたいのですが どのようにしたらよろしいでしょうか。 (「キーワード」文字列がどちらのカラムに入っているのか知りたいです。) [環境]  MySQL:5.5.16 よろしくご教示お願いいたします。

    • ベストアンサー
    • MySQL
  • 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
  • inner joinとwhereでの結合の違いは?

    お世話になります。 たとえば、テーブルが複数(この場合2つ)ある場合。 (1) test(カラム:table_id,table_name) (2) tester(カラム:table_id,table_name) 以下のクエリは条件的に select a.table_id, a.table_name from test a inner join tester b on a.table_id = b.table_id ************* select a.table_id, a.table_name from test a , tester b where a.table_id = b.table_id 同じですよね? パフォーマンス的にもjoinすることのメリットが判りません。

  • ASでつけた名前はWHERE条件にできないのですか?

    MySQL 4.0.26 人口 JINKO 面積 MENSEKI から 人口密度 JINKO/MITSUDO AS MITSUDO を計算し、これらをSELECTする際、 MISTUDOをWHERE条件に指定することはできないのでしょうか? 下記のSELECT文でエラーになってしまいます。 SELECT JINKO, MENSEKI, JINKO/MENSEKI AS MITSUDO FROM MYTABLE WHERE MISTDO > 20

    • ベストアンサー
    • MySQL
  • My SQL の concat文について

    あるテーブルtable01にname列があったとします。 その列に ”様" をつけたいと思い、concat文を使おうと思い、 以下のようにしたのですが、 mysql> Select concat(name,"様") from table01; +-------------------+ | concat(name,"様") | +-------------------+ | ito様 | | sato様 | | aikawa様 | | abe様 | | yamada様 | +-------------------+ 5 rows in set (0.00 sec) 列名もconcat(name,"様")となってしまっていますが、 As nameを使う以外に nameとだけ表示させる方法はありますか?

    • ベストアンサー
    • MySQL
  • MySQL SELECT WHERE 条件 大量

    mysqlのSELECT文でWHEREを使い条件を指定する時、指定する条件が数十件~数百件合った場合どうすればよいのでしょうか? 例えば、 以下のような感じで名前カラムと住所カラムがあったとします name  address 田中  東京都 鈴木  大阪府 佐藤  北海道 加藤  沖縄県 中村  群馬県 小林  岐阜県 高橋  東京都 渡辺  大阪府 伊藤  北海道 山本  沖縄県 斎藤  群馬県 阿部  岐阜県     ・     ・     ・ そこで、東京都と大阪府と北海道の人だけをSELECT文で選択したいのですが、 WHERE `address` = '東京都' OR `address` = '大阪府' OR `address` = '北海道' というように、一つづつ記述していかなければならないのでしょうか? この例の場合だと3件だけの指定ですが、もしもっと膨大な量を指定したいとなったとき、とても効率が悪いように思います。 なにか良い方法はないのでしょうか? ちなみにPHPからMySQLを利用しているのですが、現在 $where = array(); foreach($address as $value){ $where[] = "`address` = '${value}'"; } $where = implode(' OR ', $where); としておいて、 mysql_query("SELECT * FROM table WHERE ${where}"); とする方法しか思いつきません。 もっとスマートな方法があれば教えて下さい。よろしくお願いします。

    • ベストアンサー
    • MySQL
  • Oracle SQLの、where句内の条件文について教えてください。

    Oracle SQLの、where句内の条件文について教えてください。 下記SQLの(1)と(2)の記述文を教えてください。 (1)例:owner = sys,admin ownerがsysまたは、adminを抽出 (2)例:column_name = '*aaa*' column_nameに「aaa」が含まれているデータ SELECT owner, table_name,column_name FROM all_tab_columns WHERE (1)(Ownerを複数指定)   and (2)(column_nameに、●●が含まれるデータ)

  • from...where を from...join..on にするには

    以下のSQL文は from ... where ... で書かれていますが これを from ... join ... on ... で書き直したいのですが可能でしょうか? select X.col1, U.col1 from TABLE_X as X ,TABLE_U as U where U.REC_NO = (select B.REC_NO from TABLE_A as A, TABLE_B as B where A.ITME = B.ITEM and X.DATA = A.DATA fetch first 1 row only ) むずかしくしているのは、fetch first 1 row only なのですが これがないと where句のかっこのなかのselect文は複数の結果を返します しかし、その複数の結果はすべて同じものになることがデータ上保証されています 。 fetch first を除いて select distinct としても同じ結果となりますが パフォーマンスがひどく低下してしまいます。

  • where文について

    2008-10-28のような形式でMYSQLに生年月日を登録しています。 フォームのセレクトボックスにて誕生月のみを取得しlike文では なくwhere文でデータの読み込みを行いたいのですがどうやれば できるのでしょうか? 通常だと "SELECT * FROM テーブル名 where カラム名 = '200-10-28' " でいけると思うのですが誕生月のみの情報で "SELECT * FROM テーブル名 where カラム名 = '10' " とやっても無理ですよね^^; $_POST['birth_month']で誕生月を取得し数字は01~12までです。 ※取得は問題なくできておりわからないのがwhere文の書き方です。 できるだけシンプルな方法で行いたいのですがお分かりになる方が おりましたら是非ご教授お願い致します!

    • ベストアンサー
    • PHP