2014-01-31 3 views
0

У меня есть 2 таблицы:LEFT JOIN не показывает NULL результаты

  • DAY_INTERVALS (interval_start)
  • ЗАКАЗЫ (client_id, order_time, order_total_price)

Я хочу, чтобы отобразить все дни в DAY_INTERVAL таблицы против таблицы ORDERS. Ниже приведен SQL, который я использую.

SELECT DATE_FORMAT(order_time,'%Y-%m-%d') as dates, COALESCE(SUM(order_total_price), 0) AS sales 
FROM time_intervals ti 
LEFT JOIN orders o 
ON DATE(o.order_time) = ti.interval_start AND (o.client_id = 157 or o.client_id is NULL) 
GROUP BY DAY(o.order_time) 

Он не отображает результаты NULL дней, которых нет в таблице заказов. Запрос должен отображать все дни, независимо от того, находится ли он в таблице заказов.

Я рассмотрел похожие вопросы, но запрос выше - это то, что я придумал, основываясь на других решениях.

Любые советы были бы высоко оценены.

+1

Удалить группу по (и сумме) и посмотреть, получаете ли вы ожидаемый результат – kjana83

+0

Создайте подзапрос для своего выбора, а затем группу –

+0

Это была группа, вызвавшая проблему. ВЫБОР interval_start, СОАЬЕЗС (СУММА (order_total_price), 0), как продажи ИЗ time_intervals ти LEFT JOIN заказов О О DATE (o.order_time) = ti.interval_start И ( o.client_id = 157 ИЛИ o.client_id IS NULL ) GROUP BY ДНЯ (interval_start) Это работало –

ответ

0

Если вы избавитесь от AND (o.client_id = 157 or o.client_id is NULL), это даст вам набор данных, который вы ищете.

Вы эффективно выполняет «левые Без учета РЕГИСТРИРУЙТЕСЬ» из этой статьи:

http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins

Единственное различие, необходимо выполнить его из пункта ON вместо WHERE пункта.

+0

я удалил и (o.client_id = 157 или o.client_id является NULL), однако мне нужно фильтровать по client_id –

+0

Согласно ЛЕВОЙ линии соединения является то, что я но, тем не менее, он не отображает все даты с временными интервалами –

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