2014-01-31 94 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的所有日期 –