0 mysql join count outer-join zero
考虑以下两个示例表
表1:“用户”
ID REGISTER_TIME FIRSTNAME LASTNAME OPERATION_ID
1 1401789877 John Doe 29
2 1401789879 Jack Doe 29
3 1401789878 Pete Doe 29
Run Code Online (Sandbox Code Playgroud)
(请注意,register_time列存储为INT(11))
表2:“ calendar_days”
ID DAY
1 2011-01-01
... ....
n 2030-31-12
Run Code Online (Sandbox Code Playgroud)
我有以下运行良好的MySQL查询:
SELECT d.day, COUNT(d.day)
FROM calendar_days AS d
LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
WHERE l.`operation_id` = 29
GROUP BY d.day;
Run Code Online (Sandbox Code Playgroud)
但这并不能保留count等于零的日子:
day;COUNT(d.day)
2014-05-07;1
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631
Run Code Online (Sandbox Code Playgroud)
我想要的是 :
2014-05-07;1
**2014-05-08;0**
2014-05-09;1
2014-05-12;11
2014-05-13;2713
2014-05-14;2631
Run Code Online (Sandbox Code Playgroud)
我觉得我离真相很近,我已经尝试过任何可能的左外连接,右外连接,但仍然没有空结果。
由于您在联接表上使用了条件,因此您的where子句将使您left join成为inner join。尝试
SELECT d.day, COUNT(d.day)
FROM calendar_days AS d
LEFT OUTER JOIN users AS l ON DATE(FROM_UNIXTIME(l.`register_time`)) = d.day
AND l.`operation_id` = 29
GROUP BY d.day;
Run Code Online (Sandbox Code Playgroud)