2008-09-11 72 views
0

我正在嘗試做一些我已經做了一百萬次的工作,但它不工作,誰能告訴我爲什麼?在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表...

回答

3

最近我們有一個非常類似的問題,其中子查詢有時會返回空值。然後,在聲明一個奇怪的方式對待空,我覺得總是相匹配的價值,因此,如果你改變你的查詢:

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

它可能工作....

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在那裏擺脫重複。

0

你可以使用exists代替的in這樣的:

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

你應該得到更好的性能,避免了「奇怪的行爲(我懷疑是空值/結果做)使用in時。