Mysql 计数为的左外部联接未返回计数为0的行

Mysql 计数为的左外部联接未返回计数为0的行,mysql,Mysql,我试图返回一个表a组中所有项目的简单列表,其中包含B列users\u Group中相应的用户数,但我不知道哪里出了问题 SELECT groups.gid, name, COUNT(uid) AS groupcount FROM groups LEFT OUTER JOIN users_groups ON groups.gid = users_groups.gid WHERE aid = ? 我目前有两个组,其中一个有三个用户。该行在groupcount中返回正确的值,但我缺少第二行应该显示为

我试图返回一个表a组中所有项目的简单列表,其中包含B列users\u Group中相应的用户数,但我不知道哪里出了问题

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。谁能给我指出正确的方向吗?谢谢

这大概是因为aid在用户组中,而不是在组中

左侧外部联接将创建一行,其中该行为NULL。任何非空的比较都将导致不匹配

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

where coalesce(aid, ??) = ??
如果这是你询问的目的

或者,另一种选择是,查询中没有GROUPBY。试试这个:

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的值是从输入中任意选择的。

No,我应该在我的查询中得到更详细的信息-aid在groups表中,并指定groups.aid=?没用。啊,是小组成员,应该猜到的!非常感谢!我也有类似的问题。重要的一点是里面的东西就我而言,从第二张桌子开始。