トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
7-65 共通集合以外を取得
SQLパズル
NameTableA NameTableB
Name Name
---- ----
AAAA AAAA
BBBB BBBB
CCCC DDDD
NameTableAとNameTableBの、
片方にしか存在しないNameを出力する。
出力結果
Name
----
CCCC
DDDD
データ作成スクリプト
create table NameTableA(Name char(4));
insert into NameTableA values('AAAA');
insert into NameTableA values('BBBB');
insert into NameTableA values('CCCC');
create table NameTableB(Name char(4));
insert into NameTableB values('AAAA');
insert into NameTableB values('BBBB');
insert into NameTableB values('DDDD');
commit;
SQL
--■■■unionを使う方法■■■
select Name
from (select Name from NameTableA
union all select Name from NameTableB)
group by Name
having count(*) = 1
order by Name;
--■■■完全外部結合を使う方法■■■
select nvl(a.Name,b.name) as name
from NameTableA a full join NameTableB b
on (a.Name=b.Name)
where a.Name is null or b.name is null
order by Name;
解説
unionを使う方法では、
count関数で、重複をチェックしてます。
Non Matching Values(英語)