dポイントプレゼントキャンペーン実施中!

こんな感じで↓

SELECT
concat( `sation_name`, '駅' ) AS `sation_rename`
FROM
`table_name`
WHERE
`sation_rename` = `帷子ノ辻駅`

カラム名をリネームした後、
そのカラム名をWHEREの中に組み込みたいのですが
"そんなカラムは無い"とエラーになってしまいます。

as でリネームしたカラム名は
WHEREで使うことはできないのでしょうか。

A 回答 (5件)

MYSQLを使う環境がないので、


以下のようにちゃんとなっているかどうかまではわかりませんが。

一般にSQLでは、
where句の中は、select句でasを使ってつけた名前は使えませんし、
having句の中は、select句でasを使ってつけた名前があればそれしか使えません。

ということで、having句で試してみられては?
(但し、インデックスは使えませんので処理が遅いことを前提としてください。)

ま、大抵の要件では、レスポンスが大幅に悪くなっていいから、concatした結果を検索したい
ということはないはずですが。
例えば、住所1、住所2、住所3と項目があってどの項目にどこまで入っているかわからない
(住所1に都道府県までか、都道府県+市区郡までか、さらに町村まで入っているかわからない)
とかいうのなら、住所1、住所2、住所3をconcatしてその結果で検索せざるえないですが。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/30 10:39

No.3さんに補足



`sation_rename` = `帷子ノ辻`
これは、
`sation_name` = `帷子ノ辻`
これの間違いですね。

No.3さんも言ってますが、
駅をつけてWhereする必要ってあるのでしょうか?
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/30 10:37

どうでもいいかもしれませんが



SELECT
concat( `sation_name`, '駅' ) AS `sation_rename`
FROM
`table_name`
WHERE
`sation_rename` = '帷子ノ辻'

でよいのでは?
concatしたフィールドで検索をかけるとインデックスがうまく
利かないような・・・・
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/30 10:34

No.1さんに補足。



基本的に、ASでリネームした名前は、WHERE以降では使えません。
WHEREで指定できる名前はFROM以降で呼ばれた物だけです。

ですので、No.1さんのやり方でクエリーを書いてください。
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/30 10:33

下記のようにすればどうでしょう


---
SELECT *
FROM
(SELECT
concat( `sation_name`, '駅' ) AS `sation_rename`
FROM
`table_name`)
WHERE
`sation_rename` = `帷子ノ辻駅
    • good
    • 0
この回答へのお礼

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

お礼日時:2011/09/30 10:30

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


このQ&Aを見た人がよく見るQ&A