基于一对多SQL连接排除记录

时间:2010-04-08 09:31:00

标签: sql sql-server

如果一对多联接中的一条(外部)记录与某个条件匹配,我如何编写排除记录的SQL查询?

例如:

Details
ID      
1         
2         

Items
DetailID    Item
1           A
1           B
2           B
2           C

如何选择项目不包含“A”的详细记录?

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:2)

建立在systempuntoout的解决方案上:

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

答案 2 :(得分:0)

为什么不直接使用INNER JOIN:

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