- ベストアンサー
【MYSQL】asでリネームしてwhereで使う
こんな感じで↓ SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name` WHERE `sation_rename` = `帷子ノ辻駅` カラム名をリネームした後、 そのカラム名をWHEREの中に組み込みたいのですが "そんなカラムは無い"とエラーになってしまいます。 as でリネームしたカラム名は WHEREで使うことはできないのでしょうか。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
MYSQLを使う環境がないので、 以下のようにちゃんとなっているかどうかまではわかりませんが。 一般にSQLでは、 where句の中は、select句でasを使ってつけた名前は使えませんし、 having句の中は、select句でasを使ってつけた名前があればそれしか使えません。 ということで、having句で試してみられては? (但し、インデックスは使えませんので処理が遅いことを前提としてください。) ま、大抵の要件では、レスポンスが大幅に悪くなっていいから、concatした結果を検索したい ということはないはずですが。 例えば、住所1、住所2、住所3と項目があってどの項目にどこまで入っているかわからない (住所1に都道府県までか、都道府県+市区郡までか、さらに町村まで入っているかわからない) とかいうのなら、住所1、住所2、住所3をconcatしてその結果で検索せざるえないですが。
その他の回答 (4)
- 沙羅 聖児(@sara_seiji)
- ベストアンサー率25% (25/98)
No.3さんに補足 `sation_rename` = `帷子ノ辻` これは、 `sation_name` = `帷子ノ辻` これの間違いですね。 No.3さんも言ってますが、 駅をつけてWhereする必要ってあるのでしょうか?
お礼
回答ありがとうございます。 駅名部分が、正規性があまりよろしくなく LIKEを使うにしても ◯◯駅まで入ってると、ひっかからなくなってしまうんです。
- yambejp
- ベストアンサー率51% (3827/7415)
どうでもいいかもしれませんが SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name` WHERE `sation_rename` = '帷子ノ辻' でよいのでは? concatしたフィールドで検索をかけるとインデックスがうまく 利かないような・・・・
お礼
回答ありがとうございます。
- 沙羅 聖児(@sara_seiji)
- ベストアンサー率25% (25/98)
No.1さんに補足。 基本的に、ASでリネームした名前は、WHERE以降では使えません。 WHEREで指定できる名前はFROM以降で呼ばれた物だけです。 ですので、No.1さんのやり方でクエリーを書いてください。
お礼
回答ありがとうございます。
- o_chi_chi
- ベストアンサー率45% (131/287)
下記のようにすればどうでしょう --- SELECT * FROM (SELECT concat( `sation_name`, '駅' ) AS `sation_rename` FROM `table_name`) WHERE `sation_rename` = `帷子ノ辻駅
お礼
回答ありがとうございます。 サブクエリか抽出したrenameは WHERE内に使えるんですか。
お礼
回答ありがとうございます。 having句での記述を試してみます。