我有一些資料集,我會將它與自我加入進行比較
問題是,我想將 A 列與 B、C 和 D 列進行比較。如果 A 列與所有三列都不匹配,那么我會將其插入表中。
否則,如果 A 列與 B、C 或 D 列中的至少一個具有匹配值,那么我將不會插入該值。
這是我的示例資料
ID ColA ColB ColC ColD
1 ORANGE RED BLUE GREEN
2 RED YELLOW RED PURPLE
這是我的預期結果。既然ID 1沒有匹配值,那么就插入,ID 2不會插入
ID ColA ColB ColC ColD
1 ORANGE RED BLUE GREEN
我試過LEFT JOIN但 ID 2 仍然在結果中
select a.*
from TableA a
left join TableA b
on a.ID = b.ID
where 1=1
and (a.ColA <> b.ColB
OR a.ColA <> b.ColC
OR a.ColA <> b.ColD)
有什么我想念的嗎?
謝謝
更新
感謝@Dale K 幫助我,現在我添加了一些關于我們評論的資料集。
如果 ColB、ColC 或 ColD 上有NULL值我如何通過以下資料獲得預期結果
ID ColA ColB ColC ColD
3 YELLOW NULL YELLOW RED
4 RED NULL NULL RED
5 GREEN NULL BLUE RED
由于只有 ID 5 與 ColA 沒有匹配值,因此這是預期的結果
ID ColA ColB ColC ColD
5 GREEN NULL BLUE RED
謝謝
uj5u.com熱心網友回復:
您甚至不需要加入,并且您不想,AND即OR您希望所有條件都為真,而不僅僅是其中一個。
并假設 ColA 永遠不能為空或空白給出
select a.*
from TableA
where ColA <> coalesce(ColB,'') and ColA <> coalesce(ColC,'') and ColA <> coalesce(ColD,'');
然而,如果 ColB & ColC & ColD 都為空,這將匹配。
uj5u.com熱心網友回復:
它應該是
select *
from TableA
where (ColA <> ColB
AND ColA <> ColC
AND ColA <> ColD)
uj5u.com熱心網友回復:
如果您想正確處理空值(null 等于 null 但不是空白''),那么您需要以下內容
SELECT a.*
FROM TableA a
WHERE NOT EXISTS (
SELECT a.ColA
INTERSECT (
SELECT a.ColB
UNION ALL
SELECT a.ColC
UNION ALL
SELECT a.ColD
)
);
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/466133.html
上一篇:每天計算-距離臨近作業日的天數
下一篇:Row_number跳過值
