2008-09-11 2 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

В последнее время у нас была очень похожая проблема, когда подзапрос возвращал значения null. Затем в заявлении обращается нуль в странным образом, я думаю, всегда сопоставляя ценность, так что если вы измените запрос:

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.