Tab1 Tab2 Key Val1 Val2 Key Val1 Val2 --- ---- ---- --- ---- ---- AAA 111 111 AAA 111 111 BBB 111 111 BBB 111 222 CCC 111 111 CCC 222 111 DDD 111 111 DDD 222 222 Tab1とTab2を、Keyで紐づけて比較して、 Val1が等しく 、Val2も等しい場合は、 compに0 Val1が等しく 、Val2も等しくない場合は、 compに1 Val1が等しくなく、Val2も等しい場合は、 compに2 Val1が等しくなく、Val2も等しくない場合は、 compに3 を出力する。 出力結果 Key Val1 Val2 comp --- ---- ---- ---- AAA 111 111 0 BBB 111 222 1 CCC 222 111 2 DDD 222 222 3
create table tab1( Key char(3), Val1 number(3), Val2 number(3)); create table tab2 as select * from tab1 where RowNum=0; insert all into Tab1(Key,Val1,Val2) values('AAA',111,111) into Tab1(Key,Val1,Val2) values('BBB',111,111) into Tab1(Key,Val1,Val2) values('CCC',111,111) into Tab1(Key,Val1,Val2) values('DDD',111,111) into Tab2(Key,Val1,Val2) values('AAA',111,111) into Tab2(Key,Val1,Val2) values('BBB',111,222) into Tab2(Key,Val1,Val2) values('CCC',222,111) into Tab2(Key,Val1,Val2) values('DDD',222,222) select 1 from dual; commit;
select b.Key,b.Val1,b.Val2, case when a.Val1 = b.Val1 and a.Val2 = b.Val2 then 0 when a.Val1 != b.Val1 and a.Val2 = b.Val2 then 1 when a.Val1 = b.Val1 and a.Val2 != b.Val2 then 2 else 3 end as comp from Tab1 a,Tab2 b where a.Key = b.Key;
case式で、場合分けを行ってます。 Val1が等しい場合と、等しくない場合があり、 Val2が等しい場合と、等しくない場合があり、 和の法則と積の法則により (1+1)*(1+1)=2*2=4 で4通りの場合があります。 なぜ場合分けが必要か 【第254回】和の法則 【第255回】積の法則