SQLでデータを取得するときに、別名で名前をつけることって多いと思います。特にサブクエリやJoinでよく使います
そのときに気をつけなければならないことはWHERE・HAVING・OEDERBYで使えず不便ですよね
自分もエラーばかりでイライラしてました!もう少し汎用性高めてよ!
実は簡単な解決方法があるんです!しっかりと説明していきます
Where句に別名が使えない
例えばこんなSQLがあったとします。
select
りんご
,みかん
,バナナ as ばなな
from くだもの
where ばなな = '黄色'
where句のばななは別名なので使用できません...
(where バナナ = '黄色')だったらイケるんですよね、めんどくさ
別名が使えないときの解決法!
メチャクチャ簡単な方法でした笑
select *
from
(
select
りんご
,みかん
,バナナ as ばなな
from くだもの
) T
where ばなな = '黄色'
さっきのSELECTをT(任意の名前)というテーブルに置き換えてやると使えるんです!
なんで使えるのでしょうか?
ポイント
カッコで囲ったSELECTはりんご・みかん・ばななというカラムのテーブルとみなされるため、
カッコの外のWHERE句で別名を使える様になりました!
外カッコでSELECTしている「*」は中のカラムでも構いません
GROUPBY・HAVINGにも使えちゃう!
WHERE句以外でも使えちゃいます!!
select *
from
(
select
count(りんご) as cnt
from くだもの
group by りんご
) T
group by cnt
having cnt > 0
group by cnt はいらないかもしれません
まあこの場合は自分だったらこんな感じにしますが...笑
select
count(りんご) as cnt
from くだもの
group by りんご
having count(りんこ) > 0
最近使うのはRow_Numberかもしれません
皆さんも色々試してみてください!!