简体   繁体   English

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

[英]Excluding records based upon a one to many SQL join

How would I write a SQL query that excludes a record if one (external) record from a one to many join matches a certain condition? 如果一个到多个连接中的一个(外部)记录匹配某个条件,我将如何编写排除记录的SQL查询?

For example: 例如:

Details
ID      
1         
2         

Items
DetailID    Item
1           A
1           B
2           B
2           C

How would I select the detail records where the Items do not include 'A'? 如何选择项目不包含“A”的详细记录?

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

building on systempuntoout's solution: 建立在systempuntoout的解决方案上:

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

Why not just using INNER JOIN like: 为什么不直接使用INNER JOIN:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM