在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
时。