我正在尝试选择所有用户并获取每个用户从加入时间表中记录的小时数。但是,如果用户根本没有记录任何时间,我没有在结果中返回他们的名字。我仍然想得到每个用户的名字,即使他们没有在时间表中记录任何内容。
如果删除该行,我可以获得所有用户的结果:
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
答案 0 :(得分:2)
在AND
子句中移动ON()
子句,在WHERE子句过滤掉整个结果集后使用AND过滤器,所以如果任何status_id为1且user_reminder为1但没有时间条目的用户已过滤,但如果在您的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