プログラミング

SQLで別名をWhere句で使えないときの対策について詳しく解説

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かもしれません

皆さんも色々試してみてください!!

-プログラミング

© 2024 ワンアップ!!