0

我有一个带有 Id 列的表 A。

我有一个带有 Id1 和 Id2 列的表 B。

我想返回表 b中所有 Id1 或 Id2 都不存在于表 A中的行。如果表 b中的Id1 或 Id2 在表 A中有匹配项,我想返回该结果。

因此,如果表 A如下所示:

Id    
123
456
789

B如下所示:

Id1 Id2    
123 545
343 432
184 789

不会返回第 1 行和第 3 行,因为它们在表 A中都有一个匹配项。但是,表 b中的第 2 行与两列都不匹配,因此将被返回。

我一直在绞尽脑汁,似乎无法弄清楚这个问题。任何帮助,将不胜感激!

4

2 回答 2

2

假设您的 Id 列不为空:

select * from tableB 
where Id1 not in (select Id from tableA) 
and Id2 not in (select Id from tableA) 

或者

select b.* 
from tableB b
left join tableA a1 on b.id1=a1.id
left join tableA a2 on b.id2=a2.id
where a1.id is null and a2.id is null
于 2013-04-09T18:02:22.080 回答
1

当查找某些数据在另一个表中不存在的记录时,总是存在 exists子句,因此得名 ;-)

select * from tableB 
where not exists
(
  select *
  from tableA
  where id in (tableB.id1, tableB.id2)
); 
于 2013-04-11T14:33:53.277 回答