• ベストアンサー

【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