2つの列に同じデータがOracleに含まれているかどうかを示す列をSELECTクエリに追加する方法がわかりません。
私は次のようなクエリを書きたいです:
select column1, column2, column1=column2 from table
そして、私がこのテーブルを持っている場合:
+---------+---------+
| column1 | column2 |
+---------+---------+
| value1 | value1 |
| value2 | value3 |
| value4 | value4 |
+---------+---------+
次のような結果が得られます。
+---------+---------+-----------------+
| column1 | column2 | column1=column2 |
+---------+---------+-----------------+
| value1 | value1 | true |
| value2 | value3 | false |
| value4 | value4 | true |
+---------+---------+-----------------+
これを行う正しい構文は何ですか?
Null値の同等性も考慮したい場合は、次を試してください。
select column1, column2,
case
when column1 is NULL and column2 is NULL then 'true'
when column1=column2 then 'true'
else 'false'
end
from table;
数年前にDECODE
の使用をやめましたが、これは移植性がないためです。また、柔軟性が低くなりますandCASE/WHEN
。
ただし、NULLをどのように扱うかにより、decodeでできる「トリック」が1つあります。デコードでは、NULLはNULLと等しくなります。これを利用して、以下のように2つの列が異なるかどうかを判断できます。
select a, b, decode(a, b, 'true', 'false') as same
from t;
A B SAME
------ ------ -----
1 1 true
1 0 false
1 false
null null true
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;
HTH