トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
8-30 Oracle8iの外部結合で論理和
SQLパズル
MasterTable SubTable
ID ID Val
-- -- ---
1 1 10
2 2 20
3 3 10
4 3 20
5 4 50
下記の外部結合と同じ結果を、Oracle8iの外部結合で取得する。
select a.ID,b.Val
from MasterTable a Left Join SubTable b
on a.ID = b.ID
and b.Val in (10,20);
出力結果
ID Val
-- ----
1 10
2 20
3 10
3 20
4 null
5 null
SQLクックブックのレシピ11.3を参考にさせていただきました
データ作成スクリプト
create table MasterTable(ID) as
select 1 from dual union
select 2 from dual union
select 3 from dual union
select 4 from dual union
select 5 from dual;
create table SubTable(ID,Val) as
select 1,10 from dual union
select 2,20 from dual union
select 3,10 from dual union
select 3,20 from dual union
select 4,50 from dual;
SQL
select a.ID,b.Val
from MasterTable a,SubTable b
where a.ID = b.ID(+)
and 1 = decode(b.Val(+),10,1,20,1);
解説
decode関数で、論理和を代用しています。