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,我该如何实现?
答案 0 :(得分:4)
给出的其他答案的问题是您要选择没有关联记录的所有用户;使用LEFT JOIN,users表位于连接的错误(可空)一侧。您可以使用RIGHT JOIN替换LEFT 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列表中的非聚合列进行分组,而不是在userid上进行分组并选择用户名。
答案 1 :(得分:1)
你应该使用LEFT JOIN而不是INNER JOIN(默认的连接类型),如下所示:
SELECT u.username, count(t.tid) as total
FROM tbl2 t
LEFT JOIN users u ON t.userid = u.userid
GROUP BY t.userid
答案 2 :(得分:0)
您想要使用LEFT JOIN
,而不是
SELECT u.username, count(t.tid) as total
FROM tbl2 t
LEFT JOIN users u ON t.userid = u.userid
GROUP BY t.userid
如果相关条目不存在, LEFT JOIN
将加入表并显示tbl2的空列结果。