[英]How to exclude records based on values in 2 other tables
在SQL Server中,我需要選擇在某一列中具有特定值的行,但是如果它們在其他2個表中具有特定值,則必須獲取這些記錄並將它們從結果中排除。 我想要的記錄可能在其他2個表中不存在。
SELECT Table1.ID
FROM
Table1
WHERE
Table1.Column1 = 'A'
AND
Table1.ID NOT IN (SELECT Table2.ID FROM Table2 WHERE Table2.Column2 = 'X')
AND
Table1.ID NOT IN (SELECT Table3.ID FROM Table3 WHERE Table3.Column3 = 'Y')
我不斷獲取ID確實出現在Table2中但沒有出現在Table3中的記錄,反之亦然。 我想做的是排除ID,如果它位於Table2的Column2 ='X'或Table3的Column3 ='Y'中
我認為我的邏輯或語法錯誤。
另外,我知道如果子查詢的結果包含NULL,則“ NOT IN”會做一些奇怪的事情,所以我不確定是否有更簡單的方法可以做到這一點。
我已經用許多不同的方式重寫了這個方法,但是我沒有得到想要的結果。 我一直沒有記錄,記錄太少,或記錄太多...啊!
有什么建議么?
您需要更改為OR
:
SELECT Table1.ID
FROM Table1
WHERE Table1.Column1 = 'A'
AND (
Table1.ID NOT IN (SELECT Table2.ID FROM Table2 WHERE Table2.Column2 = 'X')
OR
Table1.ID NOT IN (SELECT Table3.ID FROM Table3 WHERE Table3.Column3 = 'Y'))
或者您可以將其重寫為:
SELECT Table1.ID
FROM Table1
WHERE Table1.Column1 = 'A'
EXCEPT (
SELECT Table2.ID FROM Table2 WHERE Table2.Column2 = 'X'
UNION ALL
SELECT Table3.ID FROM Table3 WHERE Table3.Column3 = 'Y'
)
編輯:
SELECT DISTINCT Table1.ID
FROM Table1
LEFT JOIN Table2
ON Table1.ID = Table2.ID
AND Table2.Column2 = 'X'
LEFT JOIN Table3
ON Table1.ID = Table3.ID
AND Table3.Column3 = 'Y'
WHERE Table1.Column1 = 'A'
AND (Table2.ID IS NULL AND Table3.ID IS NULL);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.