2017-02-15 4 views
0

В настоящее время я пытаюсь получить объект из одной таблицы с глобальной статистикой, включая ежедневную статистику со второй таблицы. Для этого я использую следующий запрос на соединение, который работает до тех пор, пока statsTable содержит соответствующую строку для столбцов «» и «Date».Получить столбцы из двух таблиц с резервным значением

SELECT 
    o.ID as ID, 
    o.Image as Image, 
    o.Text as `Text`, 
    o.Views as `Views`, 
    o.Clicks as Clicks, 
    COALESCE(s.Views, 0) as DayViews, 
    COALESCE(s.Clicks, 0) as DayClicks 
FROM objectTable o 
LEFT JOIN statsTable s 
ON o.ID = s.oID 
WHERE o.userID = 1 
    AND DATEDIFF(CURDATE(), s.Date) < 1 
LIMIT 1 

Как мне изменить запрос, чтобы получить строку результатов, даже если statsTable не содержит соответствующую строку?

Запрос не дает ошибок, я просто не хочу, чтобы он возвращал пустой результат, поскольку я точно знаю, что есть данные в objectTable.

+0

вы уже используете левый join. это ан. пожалуйста, проверьте без условия –

+0

, как я уже сказал, да: левое соединение работает ** если ** statsTable имеет данные для соединения. Но я хочу получить результат, даже если данные отсутствуют. Что я должен использовать вместо 'Where'? – DosMike1

ответ

1

Вам просто нужно, чтобы переместить условие на s таблице в пункте ON:

SELECT o.ID as ID, o.Image as Image, o.Text as `Text`, 
     o.Views as `Views`, o.Clicks as Clicks, 
     COALESCE(s.Views, 0) as DayViews, 
     COALESCE(s.Clicks, 0) as DayClicks 
FROM objectTable o LEFT JOIN 
    statsTable s 
    ON o.ID = s.oID AND DATEDIFF(CURDATE(), s.Date) < 1 
WHERE o.userID = 1 ; 

LEFT JOIN сохраняет все строки в первой таблице, независимо от того, оценивает положение ON в действительности или нет. Столбцы во второй таблице: NULL для не совпадающих строк, которые затем отключают предложение WHERE.

В результате условия на таблице в первую очередь должны быть в разделе WHERE. Условия на последующих таблицах должны быть в предложении ON - для LEFT JOIN.

+0

отличное глубокое знание :) один для вас описания –

+0

имеет смысл и работает. Большое спасибо – DosMike1

Смежные вопросы