トップページに戻る
次の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をシンプルにできることがあります。