我正在尝试返回表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显示的第二行。谁能指出我正确的方向?谢谢!
答案 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的值可以从输入中任意选择。