2012-08-13 109 views
2

我想返回表A(组)中的所有项目的简单列表与列B(users_groups)中的相应用户数的计数,我可以弄清楚我要去哪里错了。左外连接计数不返回0计数行

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行显示的第0行。任何人都可以将我指向正确的方向吗?谢谢!

回答

2

想必这是因为援助在users_groups中,而不是在组中。

左外连接将创建一个行,其中这是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的值是从输入中任意选择的。

+0

不,我应该在我的查询中更详细 - 援助是在组表中,并指定WHERE groups.aid =?没有帮助。 – 2012-08-13 21:18:58

+0

啊,这是一群人,应该猜到了!谢谢一堆! – 2012-08-13 21:26:54

+0

我有一个类似的问题。重要的一点是内部数据(.....) - 在我的情况下从第二张表格。 – Yar 2016-04-11 19:00:03