我正在尝试做一些我已经做过一百万次的事情,但它不起作用,有人能告诉我为什么吗?

我有一张表格供那些发送简历的人使用,里面有他们的电子邮件地址......

我想知道这些人中是否有人没有在该网站上注册。aspnet_Membership 表包含在网站上注册的所有人员。

有 9472 名求职者,拥有独特的电子邮件地址。

此查询产生 1793 个结果:

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

这表明应该有 7679 (9472-1793) 封未在网站上注册的人的电子邮件。由于其中 1793 个确实匹配,我预计其余的不匹配......但当我对此进行查询时,我什么也没得到!

为什么这个查询没有给我任何信息???

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

我不知道这怎么可能行不通 - 它基本上是说“显示在 jobseeker 表中但不在 aspnet_Membership 表中的所有电子邮件......

有帮助吗?

解决方案

最近我们遇到了一个非常类似的问题,子查询有时返回空值。然后, in 语句以一种奇怪的方式对待 null,我认为总是匹配该值,所以如果您将查询更改为:

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.

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top