如何查找每个组丢失的行

时间:2017-06-22 21:04:15

标签: sql sql-server sql-server-2008

我有两张桌子:

输入:

A:

ID col
1  a
1  b
1  c
2  a
2  b
3  x
4  y

B 
ID col
1  a
1  b
2  a

我想为B中的每个ID找到A中的行而不是B中的每个ID。

输出:

ID Col
1  c
2  b

我尝试了什么:

  1. 左/右连接。我正在尝试select * from a left join b on a.id = b.id where b.id is null
  2. 之类的东西
  3. 除外。 select * from a except select * from b
  4. 但不确定如何修改它。

2 个答案:

答案 0 :(得分:2)

假设您希望A中的B中的记录具有相同ID但不是col的记录,则可以执行以下操作:

select
  a.ID,
  a.col
from A
left join B
  on b.ID = a.ID and b.col = a.col
where A.ID in (select distinct ID from B)  -- B contains this `ID` somewhere...
  and B.ID is null                         -- ...but not with the same `col`

测试here

答案 1 :(得分:0)

使用existsnot exists的组合。

select * 
from a
where exists (select 1 from b where a.id=b.id) --id check
and not exists (select 1 from b where a.id=b.id and a.col=b.col) -- col check