mysql - SQL 查询左连接问题

标签 mysql sql sql-server join left-join

我有两个表:usersuserlogs

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

我尝试了很多不同的方法,但都没有成功。

最佳答案

尝试将过滤条件移动到左连接中。

SELECT 
   a.id, 
   count(r.user_id) as count
FROM table1 a 
LEFT OUTER JOIN table2 r ON r.user_id = a.id AND 
                            r.created_at BETWEEN '2015-12-17' AND '2015-12-19'
GROUP BY a.id

关于mysql - SQL 查询左连接问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921056/

相关文章:

sql-server - 是否有理由在可为空的列上指定 DEFAULT (NULL)?

SQL Server - 查找与特定值匹配的最后一行

sql - 将管理员用户与前端用户放在同一个表中是好的数据库设计吗?

mysql - 使用正则表达式从 mysql 列中提取子字符串

php - 使用 jquery ajax 显示带有更新按钮的选定行表

MYSQL 语法不评估不等于存在 NULL

sql - 在 SQL 中使用 View

php - 使用php从MySQL中的两个连接表中删除信息

mysql - 如何检查数据库中是否已存在电子邮件

sql - 将 Vertica 查询结果导出到 csv 文件