web-dev-qa-db-ja.com

Oracleで2つの列の比較を1つの列として選択する方法

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            |
+---------+---------+-----------------+

これを行う正しい構文は何ですか?

34
Vito De Tullio

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;
60
vc 74

数年前に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  
11
Ronnis
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table;

HTH

6
Zsolt Botykai