В продолжение вопроса, опубликованного мной на Может ли мой объясненный вариант использования быть решенным в одном запросе без влияния на производительность? , у меня другое требование сейчас, и мне интересно, можно ли это снова решитьв одном запросе, не влияя на производительность.Мое новое требование объяснено ниже:
В нем участвуют 2 таблицы:
Table 1: EMPLOYEE (column1, column2, email1, email2, column5, column6)
Table 2: EMAILLIST (email)
Мое новое требование заключается в том, если оба EMPLOYEE.EMAIL1 и EMPLOYEE.EMAIL2 имеют соответствиезапись в таблице EMAILLIST, тогда эту строку следует игнорировать.Следовательно, если у EMPLOYEE.EMAIL1 или EMPLOYEE.EMAIL2 нет соответствующей записи (что означает, что по крайней мере один из столбцов будет иметь соответствующую запись), я ожидаю, что эта строка должна быть возвращена.Поскольку ни в одном из сообщений электронной почты нет соответствующей записи, мне нужно указать в самом предложении SELECT, для какого адреса электронной почты (email1 или email2) не было соответствующей записи в таблице EMAILLIST.
Пример:
INSERT INTO EMAILLIST (email) VALUES ('test1@domain.com');
INSERT INTO EMPLOYEE (column1, column2, email1, email2, column5, column6) VALUES ('c1', 'c2', 'test1@domain.com', 'test2@domain.com', 'c5', 'c6');
Я ожидаю, что в выводе запроса я вернусь с некоторым идентификатором, для которого в одном из писем отсутствует совпадающая запись, подобная этой:
EMAIL1 | EMAIL2 | EMAIL1MATCHED | EMAIL2MATCHED
test1@domain.com | test2@domain.com | Yes | No
Мы используемPostgreSQL v8.2.3, если это имеет значение.
ОБНОВЛЕНИЕ: Размер моей таблицы немного велик: у EMPLOYEE есть 165018 записей, а у EMAILLIST - 1810228 записей