我有一个临时表,其中包含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 )
答案 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)。