2011-01-28 13 views
26

2つの列にOracleの同じデータが含まれているかどうかを示す列をSELECTクエリに追加する方法がわかりません。2列の比較をOracleの1列として選択する方法

私のようなクエリ書きたいと思います:私は、このテーブルを持っている場合、

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

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

+1

何らかの理由で、Oracle SQLには、MySQLとは異なりブール型のデータ型はありません。なぜ私は本当に不思議です。 –

+0

whell、true | false、0 | 1、whatheverはポイントを作る:) –

答えて

46

あなたもnull値の平等を考慮したい場合は、それは非ポータブルであるので、私はDECODE数年前に使用を中止し、次の

select column1, column2, 
    case 
     when column1 is NULL and column2 is NULL then 'true' 
     when column1=column2 then 'true' 
     else 'false' 
    end 
from table; 
+2

+1 NULL列の世話 – Toto

3
select column1, coulumn2, case when colum1=column2 then 'true' else 'false' end from table; 

HTH

11

を試してみてください。また、それはおよびの柔軟性が低く、CASE/WHENよりも読みにくくなります。

しかし、NULLをどのように扱うのかにより、デコードで行うことができるきれいな「トリック」があります。デコードでは、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 
関連する問題