SELECT u.username, count(t.tid) as total
FROM tbl2 t
JOIN users u ON t.userid = u.userid
GROUP BY t.userid
上面的查询工作正常,它返回在 tbl2 表中至少有一个任务的每个用户的总任务数。
但我想做的是返回所有用户,即使用户在第二个 tbl2 表中没有任何关联的记录。对于没有任何记录的用户,我希望总数显示为 0,我该如何实现?
最佳答案
给出的其他答案的问题是您要选择所有没有关联记录的用户;使用 LEFT JOIN,users 表位于连接的错误(可为空)端。您可以将 LEFT JOIN 替换为 RIGHT JOIN,但我总觉得这种语法不直观。
标准答案是在使用 LEFT JOIN 时反转表的顺序:
SELECT u.username, count(t.tid) as total
FROM users u
LEFT JOIN tbl2 t ON t.userid = u.userid
GROUP BY u.username
请注意,更好的做法是(在某些 DBMS 中,这是必需的)对 SELECT 列表中的非聚合列进行分组,而不是对用户 ID 进行分组并选择用户名。
关于Mysql如何做这个查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5967161/