2015-08-03 19 views
5

Tôi bị kẹt với một truy vấn đơn giản. Những gì tôi muốn là để có được tất cả các hàng ngoại trừ một Vui lòng có một cái nhìn tại các dữ liệu sau đây.Oracle: Nhận tất cả các hàng ngoại trừ một số

COL_A COL_B 
B  D 
B  (null) 
B  C 
G  D 
G  (null) 
G  C 

Tôi muốn nhận tất cả các hàng ngoại trừ B C. Vui lòng xem qua số sqlfiddle

Tôi đã cố gắng lấy các hàng bằng cách anding col_A <> 'B' and col_B <> 'C' nhưng không hoạt động. giúp đỡ của bạn sẽ được nhiều đánh giá cao.

Cảm ơn

+0

Vui lòng thêm SQL vào câu hỏi của bạn. – PhilMasterG

Trả lời

1

Hãy thử

where not(col_A = 'B' and col_B = 'C') 

hoặc

where col_A <> 'B' or col_B <> 'C' 
0

Ah, âm. Luôn gây rắc rối. Với một truy vấn SQL như thế này bạn phải suy nghĩ về những gì bạn muốn BAO GỒM, không phải những gì bạn muốn LOẠI TRỪ.

Nếu bạn làm where nvl(doc_typ,'NA') <> 'C' and nvl(req_for, 'NA') <> 'B';, bạn không bao gồm bất kỳ hàng với DOC_TYPE của C, và bạn không bao gồm bất kỳ hàng với req_for của B.

Bạn muốn làm where nvl(doc_typ,'NA') <> 'C' or nvl(req_for, 'NA') <> 'B';. Bằng cách này, một DOC_TYPE của C vẫn sẽ được bao gồm, miễn là req_for của nó không phải là cũng B.

0

thể bạn không chỉ loại bỏ các hàng không mong muốn:

select req_for col_A, doc_typ col_B from a 
where NOT (NVL(doc_typ,'NA') = 'C' AND nvl(req_for,'NA') = 'B'); 
2

Một giải pháp khả thi. Có lẽ không phải là thanh lịch nhất:

select req_for col_A, doc_typ col_B 
from a 
where (req_for IS NULL OR doc_typ IS NULL) 
OR (req_for,doc_typ) 
NOT IN (select 'B','C' from dual); 
0
select req_for col_A, doc_typ col_B from a 
where req_for||doc_typ != 'BC'; 

select req_for col_A, doc_typ col_B from a 
where case when req_for = 'B' and doc_typ='C' then 0 else 1 end > 0 
1

Vấn đề của bạn là NULL giá trị. Dưới đây là cách ngắn gọn để thể hiện điều này trong Oracle:

where (col_A || col_B) <> 'BC' 

Oracle coi giá trị chuỗi rỗng trong chuỗi nối.

+1

Điều gì sẽ xảy ra nếu cả hai cột đều rỗng? – user2672165

+0

@ user2672165. . . Sau đó kết quả sẽ là ''''/NULL và điều kiện sẽ thất bại. Tuy nhiên, dữ liệu mẫu không có giá trị 'NULL' trong cột đầu tiên. Bởi vì có NULL trong lần thứ hai, tôi có thể giả định hợp lý rằng đây không phải là một sự giám sát. –

Các vấn đề liên quan