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

10-228 Outer Unionのような完全外部結合

SQLパズル

Table1              Table2
ID    LastName      ID    Val
----  --------      ----  ---
1111  Smith         1111  200
2222  Maria         2222  300
3333  Victo         3333  400

以下のOuter Unionのような結果を出力する。

出力結果
ID    LastName   Val
----  --------  ----
1111  Smith     null
2222  Maria     null
3333  Victo     null
1111  null       200
2222  null       300
3333  null       400

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


データ作成スクリプト

create table Table1(ID,LastName) as
select 1111,'Smith' from dual union
select 2222,'Maria' from dual union
select 3333,'Victo' from dual;

create table Table2(ID,Val) as
select 1111,200 from dual union
select 2222,300 from dual union
select 3333,400 from dual;


SQL

--■■■完全外部結合を使う方法■■■
select nvl(a.ID,b.ID) as ID,a.LastName,b.Val
  from Table1 a full join Table2 b
    on 1=0
order by a.ID,b.ID;

--■■■union allを使う方法■■■
select ID,LastName,to_number(null) as Val from Table1
union all
select ID,to_char(null),Val from Table2;


解説

完全外部結合とunion allは、
ベン図が一致するため
相互変換できることが多いです。

3-27 full joinとunionの相互変換
3-38 Outer Union (外和集合演算)