Mysql在self或类似服务器上左连接

Mysql在self或类似服务器上左连接,mysql,left-join,self,Mysql,Left Join,Self,我有这样一个问题: SELECT SUM(spend.price) AS total, WEEKDAY(spend.date) AS weekday FROM spend WHERE spend.date BETWEEN '2012-11-01' AND '2012-11-07' GROUP BY WEEKDAY(spend.date) ; 现在,查询只提供了用户进行某些付款的天数 total weekday 60 2 10 3 3 5 3 6 total wee

我有这样一个问题:

SELECT SUM(spend.price) AS total, WEEKDAY(spend.date) AS weekday
FROM spend
WHERE spend.date BETWEEN '2012-11-01' AND '2012-11-07'
GROUP BY WEEKDAY(spend.date) ;
现在,查询只提供了用户进行某些付款的天数

total weekday
60    2
10    3
3     5
3     6
total weekday
0     1
60    2
10    3
0     4
3     5
3     6
0     7
但是相反,我想给我0(零)每天没有付款

total weekday
60    2
10    3
3     5
3     6
total weekday
0     1
60    2
10    3
0     4
3     5
3     6
0     7

表架构。

以下是原始语法:

SELECT SUM(spend.price) AS total, day AS weekday
FROM (SELECT price, WEEKDAY(date) as day FROM spend WHERE date BETWEEN '2012-11-01' AND '2012-11-07'
UNION ALL
SELECT 0,0
UNION ALL
SELECT 0,1
UNION ALL
SELECT 0,2
UNION ALL
SELECT 0,3
UNION ALL
SELECT 0,4
UNION ALL
SELECT 0,5
UNION ALL
SELECT 0,6
) spend
GROUP BY day ;
这是缩短的一个:

CREATE TEMPORARY TABLE tmp ( `price` int, `day` int );
INSERT INTO tmp VALUES (0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6);
SELECT SUM(spend.price) AS total, day AS weekday
FROM (SELECT price, WEEKDAY(date) as day FROM spend WHERE date BETWEEN '2012-11-01' AND '2012-11-07'
UNION ALL
SELECT * FROM tmp
) spend
GROUP BY day ;

下面是一个演示:

从子查询中删除日期。否则这将抛出一个错误。@Tom我没有在子查询中选择日期,但我必须使用它来检查范围这个问题有没有更短的语法?因为我将有类似的查询按月、年进行分组。@simo我找到了一个较短的语法,看一看,我想我也用了几个月的时间。你能不能把第一个语法也放回去,仅供参考,因为我现在正在使用它。我会记下你的答案,谢谢你的努力。