問題
「待機中の飛行機をすべて操縦できるパイロットを全員選択する」
PilotSkills(pilot,plane)
pilot | plane
-----------------+-----------------
Celko | Piper Cub
Higgins | B-52 Bomber
Higgins | F-14 Fighter
Higgins | Piper Cub
Jones | B-52 Bomber
Jones | F-14 Bomber
Smith | B-1 Bomber
Smith | B-52 Bomber
Smith | F-14 Fighter
Wilson | B-1 Bomber
Wilson | B-52 Bomber
Wilson | F-14 Fighter
Wilson | F-17 Fighter
Hangar(plane)
plane
-----------------
B-1 Bomber
B-52 Bomber
F-14 Fighter
求めたい結果
pilot
-----------------
Smith
Wilson
Emaさんの答え
Kungさんの答え
SQL
select pilot
from pilotskills ps INNER JOIN hangar h
on ps.plane = h.plane
group by pilot
having count(*) = (select count(*)
from hangar);
考え方
①PilotSkillとHangarを内部結合するとH.planeにないPS.planeの行が消える。
②結合した結果をpilotでグループ化し、各グループをカウントする。
③カウント結果がHangarのカウントした結果と等しい行のpilotを出力する。
結果
実行できました!!
pilot
-----------------
Smith
Wilson
(2 rows)
最終更新:2008年05月07日 12:42