Я пытаюсь использовать следующий запрос, чтобы отфильтровать довольно большую таблицу и собрать данные о пользователях, у которых есть обновленные данные (таблица с идентификаторами пользователей для обновлений встроена в триггеры ala и очищена ежедневно). Таким образом, цель состоит в том, что возвращаемые данные в следующем формате:MySQL Left Join, производящий нулевые строки
+--------------------------------------------------------------------------------+
| web_contacts_id contact_id franchise_id last_transaction_date email |
+--------------------------------------------------------------------------------+
| 1 23 1 1/1/15 [email protected]|
| 2 null null null null |
| ... ... ... ... ... |
+--------------------------------------------------------------------------------+
Таким образом, мы можем сказать, какие пользователи были обновлены, но не имели сделки еще.
Однако запрос производит следующие результаты, когда другая сторона левого запроса не имеет ничего, чтобы соответствовать на (т.е., не найти максимальное last_transaction_date)
+--------------------------------------------------------------------------------+
| web_contacts_id contact_id franchise_id last_transaction_date email |
+--------------------------------------------------------------------------------+
| 1 23 1 1/1/15 [email protected]|
| null null null null null |
| ... ... ... ... ... |
+--------------------------------------------------------------------------------+
Я не знаю, почему left join устанавливает для всех значений значение null для строки, к которой он не может присоединиться, тем более, что для таблицы LEFT для этих пользователей есть web_contacts_id. Вот запрос, который я использую в настоящее время.
SELECT wcl.web_contacts_id, wcl.contact_id, wcl.franchise_id, wcl.last_transaction_date, wc.email
FROM bl_updates bld
LEFT JOIN (
SELECT wcl.contact_id, wcl.franchise_id, wcl.web_contacts_id, wcl2.last_transaction_date
FROM web_contacts_location wcl
INNER JOIN (
SELECT wcl_inner.web_contacts_id, MAX(wcl_inner.last_transaction_date) as last_transaction_date
FROM web_contacts_location as wcl_inner
WHERE web_contacts_id IN (
SELECT id FROM bl_updates
)
GROUP BY web_contacts_id
) wcl2 on wcl.web_contacts_id = wcl2.web_contacts_id AND wcl.last_transaction_date = wcl2.last_transaction_date
)wcl ON wcl.web_contacts_id = bld.id
LEFT JOIN web_contacts wc on wc.id = wcl.web_contacts_id