Вопрос

Я пытаюсь сделать то, что делал миллион раз, и это не работает. Кто-нибудь может сказать мне, почему?

У меня есть таблица для людей, приславших резюме, и в ней есть их адреса электронной почты...

Я хочу узнать, НЕ зарегистрировался ли кто-нибудь из этих людей на веб-сайте.В таблице 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...

Это было полезно?

Решение

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

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

может сработает....

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

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

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

Вы также можете добавить сюда GROUP BY или DISTINCT, чтобы избавиться от дубликатов.

Вы могли бы использовать exists вместо in так:

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

Вы должны повысить производительность и избегать «странного» поведения (которое, как я подозреваю, связано с нулевыми значениями/результатами) при использовании in.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top