問題

「待機中の飛行機をすべて操縦できるパイロットを全員選択する」
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