トップページに戻る
次の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式のススメ