在SQL Server中查找丢失的电子邮件

问题描述:

我正在尝试做一些我已经做了一百万次的工作,但它不工作,谁能告诉我为什么?在SQL Server中查找丢失的电子邮件

我对谁的简历发送人一个表,它有它自己的电子邮件地址...

我想看看是否有这些人都没有在网站上注册。 aspnet_Membership表包含所有在网站上注册的人员。

有9472求职者,唯一的电子邮件地址。

,该查询产生1793个结果:

select j.email from jobseeker j 
join aspnet_Membership m on j.email = m.email 

这表明,应该是谁没有在网站上签署了7679人(9472-1793)的电子邮件。由于他们1793年的DID匹配,我期望其他人不匹配......但是当我做这个查询时,我什么都没有!

为什么这个查询不给我什么?

select j.email 
from jobseeker j 
where j.email not in (select email from aspnet_Membership) 

我不知道怎么会不工作 - 它基本上是说“让我知道这是在求职表中的电子邮件,但不是在aspnet_Membership表...

最近我们有一个非常类似的问题,其中子查询有时会返回空值。然后,在声明一个奇怪的方式对待空,我觉得总是相匹配的价值,因此,如果你改变你的查询:

select j.email 
from jobseeker j 
where j.email not in (select email from aspnet_Membership 
         where email is not null) 

它可能工作....

你可以有很多重复的在那里我没有看到查询错误了我的头顶部,但你可以尝试写这样说:

SELECT j.email 
FROM jobseeker j 
LEFT JOIN aspnet_Membership m ON m.email = j.email 
WHERE m.email IS NULL 

你也有可能抛出一个GROUP BY或DISTINCT在那里摆脱重复。

你可以使用exists代替的in这样的:

Select J.Email 
From Jobseeker j 
Where not exists (Select * From aspnetMembership a where j.email = a.email) 

你应该得到更好的性能,避免了“奇怪的行为(我怀疑是空值/结果做)使用in时。