MySQL оставил запрос на внешнее соединение - PullRequest
1 голос
/ 13 декабря 2011

У меня есть две таблицы,

структура первой таблицы (данные):

-id
-name
-title
-mail
-source_id

и второй стол (почта):

-id
-record_id
-mail
-date

может быть несколько дублирующих записей в таблице данных и некоторые записи с пустым почтовым полем. Я отправляю электронные письма этим клиентам, и я хочу сохранить, чья электронная почта была отправлена ​​со временем в почтовой таблице. и я хочу исключить записи, на которые их письма уже отправлены

Я использую этот запрос:

SELECT * FROM `data`
LEFT OUTER JOIN `mail`
ON `data`.`source_id` != `mail`.`record_id`
WHERE `data`.`mail` != ''
ORDER BY `data`.`id` ASC LIMIT 1

также я попробовал:

SELECT * FROM `data`
LEFT OUTER JOIN `mail`
USING(`mail`)
WHERE `data`.`mail` != ''
ORDER BY `data`.`id` ASC LIMIT 1

но он по-прежнему показывает повторяющиеся записи и не исключает записи из почтовой таблицы

есть идеи? или лучшее решение? Кстати, я не могу изменить первую таблицу и добавить новое поле для проверки отправленных писем

заранее спасибо

1 Ответ

0 голосов
/ 13 декабря 2011

попробуйте

давайте изменим != на IS NOT NULL (я также думаю, что вы должны использовать <> вместо !=)

SELECT * FROM `data`
LEFT OUTER JOIN `mail`
ON `data`.`source_id` != `mail`.`record_id`
WHERE `data`.`mail` IS NOT NULL
ORDER BY `data`.`id` ASC LIMIT 1

ОБНОВЛЕНИЕ: давайте попробуем ОТЛИЧИТЬ

SELECT (DISTINCT data.email) FROM `data`
LEFT OUTER JOIN `mail`
ON `data`.`source_id` != `mail`.`record_id`
WHERE `data`.`mail` IS NOT NULL
ORDER BY `data`.`id` ASC LIMIT 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...