子查询中不存在

时间:2019-04-11 10:07:22

标签: sql sql-server tsql

我有一个临时表,其中包含personal_ref的列表,并且我还有一个名为“ Email”的表,其中包含Individual_ref和其中的email列。我想找出那些临时表在电子邮件表中不存在。

下面是我的查询,它没有产生正在寻找的结果。

select t.ind_ref from #temp_email t
where t.ind_ref  not in (SELECT EM.INDIVIDUAL_REF FROM EMAIL EM )

2 个答案:

答案 0 :(得分:2)

似乎INDIVIDUAL_REF具有空值,因此,在这种情况下,NOT EXISTS可以做到:

select t.ind_ref
from #temp_email t
where not exists (select 1 from email e where e.INDIVIDUAL_REF = t.ind_ref);
如果子查询返回NOT IN值,

null将失败。因此,您有两种方法,一种是使用IS NOT NULL过滤子查询,或者直接使用NOT EXISTS

答案 1 :(得分:1)

确保电子邮件表中的Individual_Ref的值都不为空,因为当我们在外部查询中不使用not来查询内部查询中的不匹配值时,内部查询中的任何值为null的结果都可以得到整个结果为空。 我的建议是在内部查询中使用where子句作为(where individual_ref不为null)。