Mysql如何做这个查询

时间:2011-05-11 15:55:13

标签: mysql

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,我该如何实现?

3 个答案:

答案 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的空列结果。