トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
10-249 共通集合が空集合なら、元の集合を出力
SQLパズル
ATable BTable
Val Val
--- ---
1 2
2 3
3
Aテーブルと、Bテーブルの共通集合を出力する。
ただし、それが空集合ならAテーブルを出力する。
出力結果
Val
---
2
3
■■■■■■■■■■■■■■■■■■■■■■■■■■■■■
共通集合が空集合のパターン
ATable BTable
Val Val
--- ---
5 2
6 3
出力結果
Val
---
5
6
データ作成スクリプト
create table A(Val number(1));
create table B(Val number(1));
--■■■パターン1(共通集合が空集合でないパターン)■■■
truncate table A;
truncate table B;
insert all
into A values(1)
into A values(2)
into A values(3)
into B values(2)
into B values(3)
select 1 from dual;
commit;
--■■■パターン2(共通集合が空集合のパターン)■■■
truncate table A;
truncate table B;
insert all
into A values(5)
into A values(6)
into B values(2)
into B values(3)
select 1 from dual;
commit;
SQL
select aVal as Val
from (select a.Val as aVal,b.Val as bVal,
max(b.Val) over() as hasNull
from A Left Join B
on a.Val = b.Val)
where hasNull is null
or bVal is not null
order by aVal;
解説
外部結合してから分析関数のmax関数を使い、
共通集合が空集合かを調べています。