2

我正在尝试返回表 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 显示的第二行。谁能指出我正确的方向?谢谢!

4

1 回答 1

2

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

左外连接将创建一个值为 NULL 的行。“is 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 子句中包含未聚合的列。但是,它仅按 group by 中的内容分组。由于您没有为分组指定任何内容,因此它会在所有数据上生成一行。gid 和 name 的值是从输入中任意选择的。

于 2012-08-13T21:17:58.477 回答