3. 自テーブルを参照するSQLのアンチパターン
自テーブルを参照するSQLを考えます。サンプルデータと修正対象のSQLと出力結果は下記です。
| ID | Val |
| 111 | 30 |
| 111 | 50 |
| 222 | 10 |
| 222 | 30 |
| 333 | 10 |
| 444 | 0 |
| 444 | 10 |
| 555 | 60 |
IDごとでValが全て20以上のIDの行を出力します。
| ID | Val |
| 111 | 30 |
| 111 | 50 |
| 555 | 60 |
select a.ID,a.Val
from SelfRef a,
(select ID
from SelfRef
group by ID
having min(case when Val >= 20
then 1
else 0 end)=1) b
where a.ID = b.ID
order by a.ID,a.Val;
前問でも扱いましたが、上記のSQLのようにfrom句で(インラインビュー) bと記述しているにも関わらず、select句で表別名bからのデータ表示を行っていないSQLは、書き換えることができます。上記のSQLを可読性の高い記述で同じ結果を取得できるSQLに修正して下さい。
大本のselect文のfrom句から、インラインビューをなくしてみます。
