我陷入了一個簡單的查詢。我想要的是除了一列之外的所有行請查看以下數據。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'
獲得行,但它不是和操作。您的幫助將不勝感激。
謝謝
我陷入了一個簡單的查詢。我想要的是除了一列之外的所有行請查看以下數據。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'
獲得行,但它不是和操作。您的幫助將不勝感激。
謝謝
嘗試
where not(col_A = 'B' and col_B = 'C')
或
where col_A <> 'B' or col_B <> 'C'
啊,否定。始終造成麻煩。用這樣的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.
你能不能只刪除不需要的行:
select req_for col_A, doc_typ col_B from a
where NOT (NVL(doc_typ,'NA') = 'C' AND nvl(req_for,'NA') = 'B');
一種可能的解決方案。也許不是最優雅:
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);
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
你的問題是NULL
值。下面是Oracle表達這種一個簡潔的方式:
where (col_A || col_B) <> 'BC'
甲骨文對待NULL
值作爲字符串連接空字符串。
如果兩列都爲空,該怎麼辦? – user2672165
@ user2672165。 。 。那麼結果將是''''/ NULL,並且條件將失敗。但是,樣本數據在第一列中沒有「NULL」值。因爲第二秒有NULL,我可以合理地認爲這不是疏忽。 –
請將SQL添加到您的問題中。 – PhilMasterG