2011-01-28 13 views
26

Nie mogę wymyślić, jak dodać kolumnę do mojego zapytania SELECT wskazującą, czy dwie kolumny zawierają te same dane w Oracle.Jak wybrać porównanie dwóch kolumn jako jednej kolumny w Oracle

chciałbym napisać zapytanie jak:

select column1, column2, column1=column2 from table 

i, jeśli mam poniższej tabeli:

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

uzyskać wynik jak:

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

Jaki jest poprawna składnia, aby to zrobić?

+1

Z jakiegokolwiek powodu Oracle SQL nie ma boolowskiego typu danych w przeciwieństwie do MySQL. Naprawdę się zastanawiam, dlaczego. –

+0

whell, true | false, 0 | 1, cokolwiek by to wskazywało :) –

Odpowiedz

46

Jeśli rozważyć wartości null równość też wypróbować następującą

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 za dbanie o kolumny NULL – Toto

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

HTH

11

przestałem używać DECODE kilka lat temu, ponieważ nie jest przenośny. Ponadto jest on mniej elastyczny niż mniejszy niż i mniej czytelny niż CASE/WHEN.

Jednak istnieje jedna zgrabna "sztuczka", którą można zrobić z dekodowaniem, ponieważ dotyczy ona NULL. W dekode wartość NULL jest równa NULL. Można to wykorzystać do określenia, czy dwie kolumny różnią się, jak poniżej.

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 
Powiązane problemy