根据一对多SQL排除记录

问题描述:

如何编写SQL查询以排除记录,如果一对多连接中的某个(外部)记录与特定条件匹配?根据一对多SQL排除记录

例如:

Details 
ID  
1   
2   

Items 
DetailID Item 
1   A 
1   B 
2   B 
2   C 

我怎么会选择了详细记录,其中的项目不包括“A”?

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

为什么不直接使用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

建筑:

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