Игнорировать внутреннее соединение, если нет записей? - PullRequest
0 голосов
/ 08 ноября 2018

Эти два требования должны быть выполнены:

  • Выберите товары со статусом «ожидание».
  • Последнее электронное письмо должно быть отправлено 3 дня назад.

Даны следующие таблицы и столбцы:

продукты: id, имя, status_id, уведомление

статус: id, имя

emaillogs: id, идентификатор продукта, тема, текст, дата создания

Я попробовал следующее:

SELECT 
    product.id
FROM
    product
        LEFT JOIN
    status ON product.status_id = status.id
        INNER JOIN
    emaillog ON product.id = emaillog.product_id
        AND (emaillog.date_created <= '2018-11-04 16:32:49')
WHERE
    (status.name = 'waiting' AND product.notification = 1)
GROUP BY emaillog.product_id

Это работает, только если в таблице emaillogs есть записи. Если в таблице адресов электронной почты нет записей, продукты, тем не менее, должны быть выбраны.

1 Ответ

0 голосов
/ 08 ноября 2018

Используйте LEFT JOIN вместо обычного внутреннего JOIN, если вы хотите сохранить несвязанные строки в наборе результатов. Но, будьте осторожны, упоминание столбца из таблицы с левым соединением в предложении WHERE преобразует левое соединение во внутреннее соединение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...