トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-114 順序表と結合してソート
SQLパズル
順序表テーブル
Order_NO ID
-------- ---
1 aaa
2 bbb
3 ccc
表A 表B
ID ItemA ID ItemB
--- ----- --- -----
aaa 3 aaa 1
ccc 1 bbb 2
表Aを、IDに紐づく、順序表のOrder_NOの昇順、
表Bを、IDに紐づく、順序表のOrder_NOの昇順
で出力する。
出力結果
ID ItemA ItemB
--- ----- -----
aaa 3 null
ccc 1 null
aaa null 1
bbb null 2
データ作成スクリプト
create table 順序表 as
select 1 as Order_NO,'aaa' as ID from dual
union select 2,'bbb' from dual
union select 3,'ccc' from dual;
create table 表A as
select 'aaa' as ID,3 as ItemA from dual
union select 'ccc',1 from dual;
create table 表B as
select 'bbb' as ID,2 as ItemB from dual
union select 'aaa',1 from dual;
SQL
--■■■order by句で相関サブクエリを使う方法■■■
select ID,ItemA,ItemB
from (select 1 as Seq_NO,ID,ItemA,null as ItemB
from 表A
union all
select 2,ID,null,ItemB
from 表B) a
order by Seq_NO,(select b.Order_NO from 順序表 b
where b.ID = a.ID);
--■■■順序表と結合させる方法■■■
select a.ID,a.ItemA,a.ItemB
from (select 1 as Seq_NO,ID,ItemA,null as ItemB
from 表A
union all
select 2,ID,null,ItemB
from 表B) a,順序表 b
where a.ID = b.ID
order by a.Seq_NO,b.Order_NO;
解説
インラインビューに、Seq_NOという列を追加して
どっちの表から取得したかを持たせてます。