MySQL 加入缺失结果

标签 mysql join

我正在尝试选择所有用户并从加入的时间表中获取每个用户记录的小时数。但是,如果用户根本没有记录任何时间,我就不会在结果中返回他们的名字。我仍然想获得每个用户的姓名,即使他们没有在时间表中记录任何内容。

如果删除该行,我可以获得所有用户的结果:

AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31')

这是我的完整查询,我做错了什么?

SELECT users.user_id,
users.user_name,
SUM(times.time_used) as hours
FROM users
LEFT JOIN times on users.user_id = times.user_id
WHERE users.user_reminder = 1
AND users.status_id = 1
AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31')
GROUP BY users.user_id
ORDER BY users.user_name

最佳答案

AND 子句移到 ON() 子句中,在 WHERE 子句后使用 AND 过滤器将过滤掉整个结果集,因此如果任何用户的 status_id 为 1 且 user_reminder是一个但没有时间条目将被过滤,但是如果在你的 on 子句中使用 AND 将加入特定于条件的用户并且即使他们没有时间条目也会返回 uesrs

SELECT users.user_id,
users.user_name,
SUM(times.time_used) as hours
FROM users
LEFT JOIN times on (users.user_id = times.user_id
AND (times.time_date BETWEEN '2014-03-01' AND '2014-03-31') )
WHERE users.user_reminder = 1
AND users.status_id = 1
GROUP BY users.user_id
ORDER BY users.user_name

关于MySQL 加入缺失结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22709292/

相关文章:

javascript - 使用 php/mysql javascript 创建一个简单的 Web 开发测试但不起作用

sql-server - 为什么join子句的顺序会影响SQL Server中的查询计划?

mysql - 左连接查询未按计划进行

mysql - 计算两个表中行 id 不匹配的 (*) 行。

mysql - SQL - 对连接表的结果进行排序

php - 如果条件为真但不是在每一行都为真,如何插入或更新?

mysql - 需要帮助组合两个 MySQL 查询

mysql - 思维狮身人面像排名和统计

sql - 使用 OR 术语在 sqlite/JOIN 中进行高效的变体记录选择

来自 MySQL 的 PHP 数组不为空但有一个空条目 - 如何避免