2014-01-31 86 views
0

我有2個表:左連接未示出NULL導致

  • DAY_INTERVALS(interval_start)
  • 令(CLIENT_ID,order_time,order_total_price)

我想顯示在所有的天針對ORDERS表的DAY_INTERVAL表。以下是我正在使用的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

這是導致問題的小組。 SELECT interval_start,COALESCE(SUM(order_total_price),0)AS銷售 FROM time_intervals TI LEFT JOIN訂單O於DATE(o.order_time)= ti.interval_start AND( o.client_id = 157 OR o.client_id IS NULL ) GROUP BY DAY(interval_start) 這個工作 –

回答

0

如果你擺脫AND (o.client_id = 157 or o.client_id is NULL)它會給你你想要的數據集。

你有效地執行「左排除JOIN」從這篇文章:

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

唯一的區別是你從你的ON子句而不是WHERE子句執行它。

+0

我刪除了AND(o.client_id = 157或o.client_id是NULL)不過,我需要通過CLIENT_ID –

+0

篩選根據鏈路LEFT JOIN就是我但是它不會顯示time_intervals的所有日期 –