左外连接,计数不返回0计数的行

时间:2012-08-13 21:15:26

标签: mysql

我正在尝试返回表A(组)中所有项目的简单列表,其中包含B列(users_groups)中相应用户数的计数,我无法弄清楚我哪里出错了。

SELECT groups.gid, name, COUNT(uid) AS groupcount
FROM groups
LEFT OUTER JOIN users_groups ON groups.gid = users_groups.gid
WHERE aid = ?

我目前有两个小组,其中一个有三个用户。该行以groupcount中的适当值返回,但我错过了使用0 groupcount显示的第二行。谁能指出我正确的方向?谢谢!

1 个答案:

答案 0 :(得分:2)

大概这是因为援助是在users_groups而不是在群组中。

左外连接将创建一个NULL为NULL的行。除“是”之外的任何比较都将导致不匹配。

您可以通过执行以下操作来解决此问题:

where coalesce(aid, ??) = ??

如果这是您的查询意图。

或者,另一种选择是,您的查询中没有分组。试试这个:

SELECT groups.gid, name, COUNT(uid) AS groupcount
FROM groups LEFT OUTER JOIN
     users_groups
     ON groups.gid = users_groups.gid
WHERE aid = ? 
group by groups.gid, name

Mysql认为您可以在SELECT子句中包含非聚合列。但是,它只按组中的内容进行分组。由于您没有为分组指定任何内容,因此它会在所有数据上生成一行。 gid和name的值可以从输入中任意选择。