2010-04-08 105 views
6

如何編寫SQL查詢以排除記錄,如果一對多連接中的某個(外部)記錄與特定條件匹配?根據一對多SQL排除記錄

例如:

Details 
ID  
1   
2   

Items 
DetailID Item 
1   A 
1   B 
2   B 
2   C 

我怎麼會選擇了詳細記錄,其中的項目不包括「A」?

回答

5
SELECT * 
FROM details d 
WHERE NOT EXISTS ( 
    SELECT * 
    FROM items i 
    WHERE i.DetailID == d.ID 
    AND i.Item = 'A') 
0

爲什麼不直接使用INNER JOIN,如:上systempuntoout的解決方案

SELECT details.* 
FROM details 
INNER JOIN items ON details.ID=items.DetailID AND items.Item<> 'A' 
+2

,將返回第二行中的項目表中。 OP想要完全排除detailId = 1。 – 2010-04-08 09:57:18

+0

OP是否明確表示要求:)可能就像你說的那樣。 – systempuntoout 2010-04-08 10:01:54

2

建築:

SELECT details.* 
FROM details 
LEFT OUTER JOIN items ON details.ID=items.DetailID AND items.Item = 'A' 
WHERE items.DetailID IS NULL