トップページに戻る
次のSQLパズルへ
前のSQLパズルへ
2-1-16 式のリストの比較その1
SQLパズル
ListCompテーブル
a1 b1 c1 a2 b2 c2 a3 b3 c3
-- -- -- -- -- -- -- -- --
1 2 3 4 5 6 7 8 9
1 2 1 2 1 1 1 1 2
1 1 1 1 1 1 2 2 2
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 4 5 6 7 8 9 NG
1 2 1 2 1 1 1 1 2 NG
1 1 1 1 1 1 2 2 2 OK
データ作成スクリプト
create table ListComp(a1,b1,c1,a2,b2,c2,a3,b3,c3) as
select 1,2,3,4,5,6,7,8,9 from dual union all
select 1,2,1,2,1,1,1,1,2 from dual union all
select 1,1,1,1,1,1,2,2,2 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
--■■■inを使用しない方法■■■
select a1,b1,c1,a2,b2,c2,a3,b3,c3,
case when (a1,b1,c1) = ((a2,b2,c2))
or (a1,b1,c1) = ((a3,b3,c3))
then 'OK' else 'NG' end as chk
from ListComp;
--■■■inを使用する方法■■■
select a1,b1,c1,a2,b2,c2,a3,b3,c3,
case when (a1,b1,c1) in ((a2,b2,c2),(a3,b3,c3))
then 'OK' else 'NG' end as chk
from ListComp;
解説
要素数が1の集合同士で、等しい、等しくないの演算が使えます
数式のイメージは、ベクトルの等しい、等しくないの定義に似てます。
=および、!=での比較では、
nullとnullは、等しいと判定されないので、注意が必要です。
inを使っての存在チェックもできます。