2011-01-28 16 views
26

No puedo encontrar la manera de agregar una columna a mi consulta SELECT para indicar si dos columnas contienen los mismos datos en Oracle.Cómo seleccionar la comparación de dos columnas como una columna en Oracle

me gustaría escribir una consulta como:

select column1, column2, column1=column2 from table 

y, si tengo esta tabla:

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

obtener un resultado como:

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

¿Cuál es el corregir la sintaxis para hacer esto?

+1

Por alguna razón, Oracle SQL no tiene un tipo de datos booleanos a diferencia de MySQL. Realmente me pregunto por qué. –

+0

whell, true | false, 0 | 1, lo que sea que haga el punto :) –

Respuesta

46

Si usted desea considerar la igualdad de los valores nulos también, intente lo siguiente

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 para ocuparse de las columnas NULL – Toto

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

HTH

11

dejé de usar hace DECODE varios años debido a que no es portátil. Además, es menos flexible y menos legible que un CASE/WHEN.

Sin embargo, hay un buen "truco" que puede hacer con la decodificación debido a la forma en que trata con NULL. En la decodificación, NULL es igual a NULL. Eso puede ser explotado para decir si dos columnas son diferentes como a continuación.

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 
Cuestiones relacionadas