2011-01-28 9 views
26

Non riesco a capire come aggiungere una colonna alla mia query SELECT che indica se due colonne contengono gli stessi dati in Oracle.Come selezionare il confronto di due colonne come una colonna in Oracle

vorrei scrivere una query del tipo:

select column1, column2, column1=column2 from table 

e, se ho questa tabella:

+---------+---------+ 
| column1 | column2 | 
+---------+---------+ 
| value1 | value1 | 
| value2 | value3 | 
| value4 | value4 | 
+---------+---------+ 

ottenere un risultato simile:

+---------+---------+-----------------+ 
| column1 | column2 | column1=column2 | 
+---------+---------+-----------------+ 
| value1 | value1 | true   | 
| value2 | value3 | false   | 
| value4 | value4 | true   | 
+---------+---------+-----------------+ 

Qual è il sintassi corretta per fare questo?

+1

Per qualsiasi motivo, Oracle SQL non ha un tipo di dati booleano diverso da MySQL. Mi chiedo davvero perché. –

+0

whell, true | false, 0 | 1, che cosa rende il punto :) –

risposta

46

Se si vuole prendere in considerazione i valori nulli uguaglianza troppo, provare le seguenti

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 per aver cura delle colonne NULL – Toto

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

HTH

11

ho smesso di usare DECODE diversi anni fa, perché è non portabile. Inoltre, è meno flessibile e meno leggibile di uno CASE/WHEN.

Tuttavia, esiste un "trucco" preciso che è possibile eseguire con la decodifica a causa del modo in cui gestisce NULL. In decodifica, NULL è uguale a NULL. Questo può essere sfruttato per dire se due colonne sono diverse come sotto.

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 
Problemi correlati