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

2-1-17 式のリストの比較その2

SQLパズル

ListComp2テーブル
a1  b1  c1  a2  b2  c2  a3  b3  c3
--  --  --  --  --  --  --  --  --
 1   2   3   1   2   3   1   2   3
 1   2   3   1   2   3   1   2   9
 1   2   3   4   5   6   7   8   9

a1=a2かつb1=b2かつc1=c2
かつ
a1=a3かつb1=b3かつc1=c3
かチェックする。

出力結果
a1  b1  c1  a2  b2  c2  a3  b3  c3  chk
--  --  --  --  --  --  --  --  --  ---
 1   2   3   1   2   3   1   2   3  OK
 1   2   3   1   2   3   1   2   9  NG
 1   2   3   4   5   6   7   8   9  NG


データ作成スクリプト

create table ListComp2(a1,b1,c1,a2,b2,c2,a3,b3,c3) as
select 1,2,3,1,2,3,1,2,3 from dual union all
select 1,2,3,1,2,3,1,2,9 from dual union all
select 1,2,3,4,5,6,7,8,9 from dual;


SQL

col a1 for 99
col b1 for 99
col c1 for 99
col a2 for 99
col b2 for 99
col c2 for 99
col a3 for 99
col b3 for 99
col c3 for 99

--■■■all述語を使用しない方法■■■
select a1,b1,c1,a2,b2,c2,a3,b3,c3,
case when (a1,b1,c1) = ((a2,b2,c2))
      and (a1,b1,c1) = ((a3,b3,c3))
     then 'OK' else 'NG' end as chk
from ListComp2;

--■■■all述語を使用する方法■■■
select a1,b1,c1,a2,b2,c2,a3,b3,c3,
case when (a1,b1,c1) = all((a2,b2,c2),(a3,b3,c3))
     then 'OK' else 'NG' end as chk
from ListComp2;


解説

複数テーブルと等価結合する時などに、
all述語を使うとSQLをシンプルにできることがあります。