我有两张表groups
和users
。我想编写一个返回groups
行的查询,其中包含一个额外列,其中显示users
中有多少行gid
与相应组的id
匹配。我编写了一个工作正常的查询,除了users
表中没有用户gid
的用户,在这种情况下,结果中省略了group
。
SELECT a.id, a.admin, a.name, COUNT(b.zbid) users FROM groups a LEFT JOIN users b ON b.gid=a.id
我该如何解决这个问题?我已经知道它肯定是COUNT
打破了功能。为什么?好吧,如果我尝试以下内容:
SELECT a.id, a.admin, a.name, IF(ISNULL(b.zbid), 0, 1) users FROM groups a LEFT JOIN users b ON b.gid=a.id WHERE a.cid='1'
然后不会省略任何行,并且对于具有相应用户的任何行,它将显示users
= 1,否则为0。但是,如果我将其更改为:
SELECT a.id, a.admin, a.name, IF(ISNULL(b.zbid), 0, COUNT(b.zbid)) users FROM groups a LEFT JOIN users b ON b.gid=a.id WHERE a.cid='1'
然后再次省略行......
任何帮助都将不胜感激。
答案 0 :(得分:2)
这是您的第一个查询:
SELECT a.id, a.admin, a.name, COUNT(b.zbid) as users
FROM groups a LEFT JOIN
users b
ON b.gid = a.id;
您需要添加group by
,例如group by a.id
来获取所有群组的计数。
我怀疑缺少group by
是您面临的问题。