トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

10-36 複数行複数列に存在しないデータ

SQLパズル

TesMテーブル
Code
----
 100
 120
 200
 250

TesKテーブル
A01  A02  A03  A04  A05  A06  A07  A08  A09  A10
---  ---  ---  ---  ---  ---  ---  ---  ---  ---
100  100  100  100  200  100  100  100  100  120
200  200  200  200  200  200  200  200  200  200

TesMテーブルに登録されてるCodeの中で、
TesKテーブルのA01からA10までに登録されてないCodeを出力する。

出力結果
Code
----
 250

こちらを参考にさせていただきました


データ作成スクリプト

create table TesM(Code number(3));

insert into TesM values(100);
insert into TesM values(120);
insert into TesM values(200);
insert into TesM values(250);

Create table TesK(
A01 number(3),
A02 number(3),
A03 number(3),
A04 number(3),
A05 number(3),
A06 number(3),
A07 number(3),
A08 number(3),
A09 number(3),
A10 number(3));

insert into TesK values(100,100,100,100,200,100,100,100,100,120);
insert into TesK values(200,200,200,200,200,200,200,200,200,200);
commit;


SQL

select Code from TesM a
where
not exists(select 1 from TesK b
            where a.Code in(b.A01,b.A02,b.A03,b.A04,b.A05,
                            b.A06,b.A07,b.A08,b.A09,b.A10));


解説

exists述語とin述語を組み合わせてます。