こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

こんな感じで↓

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

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

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

投稿日時 - 2011-08-12 11:25:23

QNo.6937977

困ってます

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

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

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

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

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

投稿日時 - 2011-08-16 03:24:19

お礼

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

投稿日時 - 2011-09-30 10:39:08

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(5)

ANo.4

No.3さんに補足

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

No.3さんも言ってますが、
駅をつけてWhereする必要ってあるのでしょうか?

投稿日時 - 2011-08-13 14:27:22

お礼

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

投稿日時 - 2011-09-30 10:37:13

ANo.3

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

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

でよいのでは?
concatしたフィールドで検索をかけるとインデックスがうまく
利かないような・・・・

投稿日時 - 2011-08-12 13:19:00

お礼

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

投稿日時 - 2011-09-30 10:34:22

ANo.2

No.1さんに補足。

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

ですので、No.1さんのやり方でクエリーを書いてください。

投稿日時 - 2011-08-12 11:43:42

お礼

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

投稿日時 - 2011-09-30 10:33:04

ANo.1

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

投稿日時 - 2011-08-12 11:38:53

お礼

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

投稿日時 - 2011-09-30 10:30:18

あなたにオススメの質問