0

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

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

我想知道这些人中是否有人没有在网站上注册。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 表中......

4

4 回答 4

3

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

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

它可能工作....

于 2008-09-11T18:20:05.927 回答
2

你可能有很多重复的东西。我没有在脑海中看到查询错误,但您可以尝试这样写:

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

您还可以在其中添加 GROUP BY 或 DISTINCT 以消除重复项。

于 2008-09-11T18:15:21.677 回答
1

另请参阅从一个表返回不在另一个表中的所有行的五种方法

于 2008-09-11T22:33:50.073 回答
0

您可以使用exists而不是in这样:

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

在使用in.

于 2008-09-11T21:32:45.010 回答