簡體   English   中英

SQL從表中選擇所有連接的行都匹配值的行

[英]SQL Select rows from table where all joined rows match value

我有鏈接到表B中 ,其又連接到表C. 表A中

我只能通過B中的鍵從A轉到C。

我必須從A獲得所有行,其中C的所有鏈接行都具有C.value ='Y'

我嘗試了以下代碼,但是一旦在C中的鏈接行之一中找到匹配項,它就已經從A中選擇了行,而不是當C中的所有鏈接行都匹配C.value ='Y'時。

SELECT * FROM A 
LEFT JOIN B ON A.ID1 = B.ID1
LEFT JOIN C ON B.ID2 = C.ID2
WHERE C.value = 'Y'

有沒有辦法在SQL中做到這一點?

在此處輸入圖片說明 在此處輸入圖片說明

我想我現在已經了解問題了。 可能是更好的方法,但這應該可行。

SELECT * 
FROM A 
LEFT JOIN B ON A.ID1 = B.ID1
LEFT JOIN C ON B.ID2 = C.ID2
WHERE C.ID2 in (SELECT ID2 FROM C WHERE VALUE = 'N')
AND C.ID2 not in (SELECT ID2 FROM C WHERE VALUE <> 'N')

您可以通過UNION ALL執行此操作。 注意: select語句中的列數應匹配

Select *
FROM (
SELECT * FROM A
UNION ALL
SELECT * FROM B
UNION ALL 
SELECT * FROM C
)a
where value ='N'

更新:

 Select * From A
LEFT JOIN ( Select * FROM B INNER JOIN C 
               ON B.columnName = C.ColumnName 
                WHERE C.Value ='N') z
 ON z.columnName = A.ColumnName 

該查詢返回A中的所有行,其中C中所有鏈接的行都具有C.value'Y',或者沒有指向B或C的鏈接。 關於JB King的建議。

SELECT * FROM A WHERE A.ID1 
NOT IN 
( 
  SELECT DISTINCT A.ID1 FROM A 
  JOIN B ON A.ID1=B.ID1
  JOIN C ON B.ID2=C.ID2 WHERE C.value = 'N'
)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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