トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
9-10 共通集合が空集合かチェック
SQLパズル
工場テーブル 操縦士テーブル
飛行機名 操縦士ID 操縦可能機
-------- -------- ----------
ジャビィ 1 ジャビィ
ハンター 2 ファルコ
ファルコ 3 ハンター
4 ジャビィ
4 ファルコ
5 ジャビィ
5 ハンター
5 ファルコ
5 ペリカン
6 ハンター
6 ペリカン
7 ジャビィ
7 ファルコ
7 ペリカン
8 ジャビィ
8 ハンター
8 ファルコ
操縦士ID=6の人の操縦可能機の中で、工場にある飛行機(この場合は、ハンター)
を操縦可能な操縦士IDと、操縦可能機を出力する(ただし、操縦士ID=6は出力しない)
出力結果
操縦士ID 飛行機名
-------- ----------
3 ハンター
5 ジャビィ
5 ハンター
5 ファルコ
5 ペリカン
8 ジャビィ
8 ハンター
8 ファルコ
データ作成スクリプト
前のSQLパズルと同じ
SQL
select 操縦士ID,操縦可能機 as 飛行機名
from 操縦士 a
where exists(select b.操縦可能機 from 操縦士 b
where b.操縦士ID=a.操縦士ID
intersect
select b.操縦可能機 from 操縦士 b
where b.操縦士ID=6
intersect
select b.飛行機名 from 工場 b)
and 操縦士ID != 6;
解説
intersect演算子で共通集合を求めて、
exists述語で空集合かチェックしてます