簡體   English   中英

如何基於其他2個表中的值排除記錄

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM