Потеря правильного ряда при выполнении NOT IN - PullRequest
1 голос
/ 12 июля 2011

У меня есть три таблицы:

email_addr_bean_rel

    bean_id  |  email_address_id

email_addresses

    id       |  email_address

prospect_lists_prospects

    id       |  related_id

Выше приведено огромное упрощение, чтобы продемонстрировать проблему.Что мне нужно, так это список всех related_ids и всех доступных адресов электронной почты.Но я должен начать запрос в таблице email_addresses.Поэтому я использую ПРАВИЛЬНОЕ СОЕДИНЕНИЕ, чтобы получить любые related_ids без адресов электронной почты.Вот запрос:

SELECT 
       plp.related_id,
       ea.email_address
FROM   email_addresses AS ea 
       JOIN email_addr_bean_rel AS eabr 
         ON ea.id = eabr.email_address_id 
       RIGHT JOIN prospect_lists_prospects AS plp 
         ON eabr.bean_id = plp.related_id 
WHERE
      ea.email_address NOT IN ("x", "y", "z")

Если я уберу предложение WHERE, я получу все связанные идентификаторы, и для email_address будет установлено значение NULL для тех, которые не совпадают (как и ожидалось).Но когда я добавляю в предложение WHERE, я теряю эти записи RIGHT JOINED.

Есть ли какой-то аспект NOT IN или RIGHT JOIN, который я пропускаю и который может вызвать это?

1 Ответ

2 голосов
/ 12 июля 2011

ea.email_address равно NULL . Но NULL NOT IN ("x", "y", "z") всегда оценивается как NULL .

Я думаю, тебе нужно это:

WHERE (ea.email_address is NULL) or (ea.email_address NOT IN ("x", "y", "z"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...