2011-01-28 55 views
26

我無法弄清楚如何將一列添加到我的SELECT查詢中,以指示兩列在Oracle中是否包含相同的數據。如何在Oracle中選擇兩列作爲一列的比較

我想寫出這樣的查詢:

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那樣的布爾型數據類型。我真的很奇怪爲什麼。 – 2011-01-28 12:44:17

+0

whell,true | false,0 | 1,無論什麼說明:) – 2011-01-28 16:23:43

回答

46

如果要考慮空值相等過,請嘗試以下

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

HTH

11

我停止使用DECODE幾年前,因爲它是不可移植的。另外,它的靈活性較差的可讀性低於CASE/WHEN

但是,有一個整潔的「技巧」可以解碼,因爲它處理NULL的方式。在解碼中,NULL等於NULL。這可以被利用來判斷兩列是否如下所示。

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