例えば、
select hoge t from table1 where t = 1
といったように、列のエイリアスがwhere句で使えない。上記は、
select hoge t from table1 where hoge = 1
と書かなければならない。上の例では簡単なので列のエイリアスをwhere句で使えないことがあまり不便に感じられないかもしれない。しかし、以下のようにサブクエリを含んだ場合はとたんに冗長度が増す。実際にはテーブル名の前にスキーマ名も付くだろうし、サブクエリももっと複雑になるだろうから、さらに冗長度が増してしまう。
select (select table2age from table2 where table2id = table1id) table1age from table1
where (select table2age from table2 where table2id = table1id) >= 20
本当は、以下のように書きたい。
select (select table2age from table2 where table2id = table1id) t_age from table1
where t_age >= 20
なぜ、今でも列のエイリアスがwhere句で使えないのだろう? 一見すると簡単に思えるのだが、そんなに難しいのだろうか?