トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
2-2-3 in述語の引数にサブクエリ
SQLパズル
Table1 Table2
Col1 Col2 Col3 Col4
---- ---- ---- ----
1111 1111 1111 2222
1111 2222 2222 1111
1111 3333 2222 2222
2222 1111 2222 3333
2222 2222
2222 3333
Table1のCol1,Col2の値の組み合わせと同一の組み合わせが、
Table2のCol3,Col4の値の組み合わせの集合の中に存在したら、
Table1の該当レコードをDeleteする。
削除結果
Table1
Col1 Col2
---- ----
1111 1111
1111 3333
データ作成スクリプト
create table Table1(Col1,Col2) as
select 1111,1111 from dual union
select 1111,2222 from dual union
select 1111,3333 from dual union
select 2222,1111 from dual union
select 2222,2222 from dual union
select 2222,3333 from dual;
create table Table2(Col3,Col4) as
select 1111,2222 from dual union
select 2222,1111 from dual union
select 2222,2222 from dual union
select 2222,3333 from dual;
SQL
--■■■in述語を使う方法■■■
delete from Table1
where (Col1,Col2) in(select b.Col3,b.Col4 from Table2 b);
--■■■exists述語を使う方法■■■
delete from Table1 a
where exists(select 1 from Table2 b
where a.Col1 = b.Col3
and a.Col2 = b.Col4);
解説
in述語の引数には、複数行複数列のselect文を使用できます。
in述語はデバッグしやすいので、なるべくin述語を使うのがいいと思います。