我有两张桌子:
我希望在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结果。无论是否在订单表中,查询都应显示所有日期。
我已经查看了类似的问题,但上面的查询是我根据其他解决方案提出的。
任何建议都会非常感激。
答案 0 :(得分:0)
如果你摆脱AND (o.client_id = 157 or o.client_id is NULL)
,它会为你提供你正在寻找的数据集。
您正在从本文中有效地执行“Left Excluding JOIN”:
http://www.codeproject.com/Articles/33052/Visual-Representation-of-SQL-Joins
唯一的区别是你是从ON子句而不是WHERE子句执行它。