我有两张桌子:
输入:
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
我尝试了什么:
select * from a left join b on a.id = b.id where b.id is null
select * from a except select * from b
但不确定如何修改它。
答案 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)
使用exists
和not 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