MYSQL计数,在简单情况下,LEFT OUTER JOIN的计数为0

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)

我觉得我离真相很近,我已经尝试过任何可能的左外连接,右外连接,但仍然没有空结果。

jue*_*n d 5

由于您在联接表上使用了条件,因此您的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)