【发布时间】:2016-04-27 12:56:33
【问题描述】:
我有两张桌子:users 和 userlogs
table1
----------
id | name
----------
1 | A
2 | B
3 | C
4 | D
table2
----------
user_id | date
----------
1 | 2015-12-17
2 | 2015-12-18
3 | 2015-12-19
4 | 2015-12-20
如果我对选定日期执行 LEFT JOIN,它只会给出表 2 中存在的数据。
SELECT r.user_id, count(r.user_id) as count
FROM table1 a LEFT OUTER JOIN table2 r ON ( r.user_id = a.id )
WHERE r.created_at BETWEEN '2015-12-17' AND '2015-12-19'
GROUP BY a.id
我得到以下内容
Result
----------
user_id | count
----------
1 | 1
2 | 1
3 | 1
我需要类似以下的东西:
Result
----------
user_id | count
----------
1 | 1
2 | 1
3 | 1
4 | 0
我尝试了很多不同的方法,但都不成功。
【问题讨论】:
-
MySQL 还是 MS SQL Server? (不要标记未涉及的产品。其中一些产品的行为很奇怪......)
-
LEFT JOIN 时,将右侧表条件从 WHERE 移动到 ON 子句,得到真正的左连接结果。 (否则它就像一个常规的内部连接。)
-
一般的 GROUP BY 规则:“如果指定了 GROUP BY 子句,则 SELECT 列表中的每个列引用必须标识一个分组列或作为集合函数的参数。”
标签: mysql sql sql-server join left-join