トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-265 差集合をマルチテーブルインサート
SQLパズル
TableA TableB
ID Val ID Val
-- ---- -- ----
1 AAAA 1 XXXX
2 BBBB 3 YYYY
4 DDDD 4 ZZZZ
5 EEEE
IDをプライマリキーとして、
TableBにあるが、TableAにない行を、ValをnullとしてTableAにinsertする。また、
TableAにあるが、TableBにない行を、ValをnullとしてTableBにinsertする。
追加結果
TableA TableB
ID Val ID Val
-- ---- -- ----
1 AAAA 1 XXXX
2 BBBB 2 null
3 null 3 YYYY
4 DDDD 4 ZZZZ
5 EEEE 5 null
データ作成スクリプト
create table TableA(ID Primary key,Val) as
select 1,'AAAA' from dual union
select 2,'BBBB' from dual union
select 4,'DDDD' from dual union
select 5,'EEEE' from dual;
create table TableB(ID Primary key,Val) as
select 1,'XXXX' from dual union
select 3,'YYYY' from dual union
select 4,'ZZZZ' from dual;
SQL
insert first
when aID is null then into TableA(ID,Val) values (bID,null)
when bID is null then into TableB(ID,Val) values (aID,null)
select a.ID as aID, b.ID as bID
from TableA a full Join TableB b
on a.ID=b.ID;
解説