Я пытаюсь сделать что-то, что делал миллион раз, и это не работает, может кто-нибудь сказать мне, почему?
У меня есть таблица для людей, которые отправляли резюме, и в ней есть их адрес электронной почты ...
Я хочу узнать, не зарегистрировались ли какие-либо из этих людей на сайте. Таблица 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)
Я не знаю, как это могло не работать - в основном говорится: «Покажи мне все электронные письма, которые находятся В таблице соискателей, но НЕ В таблице aspnet_Membership ...


У вас может быть много дубликатов. Я не замечаю ошибки запроса, но вы можете попробовать написать ее так:
SELECT j.email
FROM jobseeker j
LEFT JOIN aspnet_Membership m ON m.email = j.email
WHERE m.email IS NULL
Вы также можете добавить туда GROUP BY или DISTINCT, чтобы избавиться от дубликатов.
Недавно у нас была очень похожая проблема, когда подзапрос иногда возвращал нулевые значения. Затем оператор in обрабатывает null странным образом, я думаю, всегда соответствует значению, поэтому, если вы измените свой запрос на:
select j.email
from jobseeker j
where j.email not in (select email from aspnet_Membership
where email is not null)
это может сработать ....
Вы можете использовать exists вместо in следующим образом:
Select J.Email
From Jobseeker j
Where not exists (Select * From aspnetMembership a where j.email = a.email)
Вы должны повысить производительность и избежать «странного» поведения (которое, как я подозреваю, связано с нулевыми значениями / результатами) при использовании in.