Поиск отсутствующих писем в 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 из них ДЕЙСТВИТЕЛЬНО совпадают, я ожидал, что остальные НЕ совпадают ... но когда я делаю запрос для этого, я ничего не получаю!

Почему этот запрос мне ничего не дает ???

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

Я не знаю, как это могло не работать - в основном говорится: «Покажи мне все электронные письма, которые находятся В таблице соискателей, но НЕ В таблице aspnet_Membership ...

ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
0
0
215
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

У вас может быть много дубликатов. Я не замечаю ошибки запроса, но вы можете попробовать написать ее так:

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.

Другие вопросы по теме