2011-01-28 37 views
26

Tôi không thể tìm ra cách thêm cột vào truy vấn SELECT của mình cho biết liệu hai cột có chứa cùng một dữ liệu trong Oracle hay không.Cách chọn so sánh hai cột dưới dạng một cột trong Oracle

Tôi muốn viết một truy vấn như:

select column1, column2, column1=column2 from table 

và, nếu tôi có bảng này:

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

được một kết quả như:

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

là gì đúng cú pháp để làm điều này?

+1

Vì lý do gì, Oracle SQL không có kiểu dữ liệu boolean khác với MySQL. Tôi thực sự tự hỏi tại sao. –

+0

whell, true | false, 0 | 1, whathever làm cho điểm :) –

Trả lời

46

Nếu bạn muốn xem xét các giá trị null bình đẳng quá, hãy thử như sau

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 cho việc chăm sóc cột NULL – Toto

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

HTH

11

tôi đã ngừng sử dụng DECODE vài năm trước vì nó là không cầm tay. Ngoài ra, nó ít linh hoạt hơn ít có thể đọc hơn CASE/WHEN.

Tuy nhiên, có một "mẹo" gọn gàng bạn có thể thực hiện với giải mã vì cách giao dịch với NULL. Trong giải mã, NULL bằng NULL. Điều đó có thể được khai thác để cho biết liệu hai cột có khác nhau như dưới đây hay không.

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 
Các vấn đề liên quan