トップページに戻る    次の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(英語)