2015-08-03 57 views
5

我陷入了一個簡單的查詢。我想要的是除了一列之外的所有行請查看以下數據。Oracle:獲得除一個之外的所有行

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

我想除了但是B C所有行。請看看sqlfiddle

我試圖通過和col_A <> 'B' and col_B <> 'C'獲得行,但它不是和操作。您的幫助將不勝感激。

謝謝

+0

請將SQL添加到您的問題中。 – PhilMasterG

回答

1

嘗試

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

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

啊,否定。始終造成麻煩。用這樣的SQL查詢,你必須考慮你想要的包括INCLUDE,而不是你想要的EXCLUDE。

如果你這樣做where nvl(doc_typ,'NA') <> 'C' and nvl(req_for, 'NA') <> 'B';,你是不是包括的C DOC_TYPE任何行,你是不是包括你想要做where nvl(doc_typ,'NA') <> 'C' or nvl(req_for, 'NA') <> 'B';與B.

的req_for任何行。這樣℃的DOC_TYPE仍然會被包括在內,只要其req_for是不是也B.

0

你能不能只刪除不需要的行:

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

一種可能的解決方案。也許不是最優雅:

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

你的問題是NULL值。下面是Oracle表達這種一個簡潔的方式:

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

甲骨文對待NULL值作爲字符串連接空字符串。

+1

如果兩列都爲空,該怎麼辦? – user2672165

+0

@ user2672165。 。 。那麼結果將是''''/ NULL,並且條件將失敗。但是,樣本數據在第一列中沒有「NULL」值。因爲第二秒有NULL,我可以合理地認爲這不是疏忽。 –

相關問題