トップページに戻る    次のSQLパズルへ    前のSQLパズルへ

2-2-7 case式とexists述語

SQLパズル

Table1      Table2
PK          FK
--          --
 1           2
 2           4
 3           6
 4           8
 5          10
 6
 7
 8
 9
10

Table1の主キーが
Table2から外部キー経由で参照されていれば1、されてなければ0
を取得する。

出力結果
PK  IsRefered
--  ---------
 1          0
 2          1
 3          0
 4          1
 5          0
 6          1
 7          0
 8          1
 9          0
10          1


データ作成スクリプト

create table Table1(PK number primary key);
create table Table2(FK number);

begin
    for i in 1..10 loop
        insert into Table1 values(i);
        if mod(i,2)=0 then --2の倍数
            insert into Table2 values(i);
        end if;
    end loop;
    commit;
end;
/


SQL

select PK,
case when exists(select 1 from Table2 b where b.FK=a.PK)
     then 1 else 0 end as IsRefered
from Table1 a;


解説

case式とexistsを組み合わせると、
データが存在するかしないかによる分岐が可能です。

CASE式のススメ