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 = ?

現在、2 つのグループがあり、そのうちの 1 つには 3 人のユーザーがいます。その行は groupcount の適切な値で返されますが、0 の groupcount で表示される 2 番目の行が欠落しています。誰かが私を正しい方向に向けることができますか? ありがとう!

4

1 に答える 1

2

おそらくこれは、援助がグループではなく users_groups にあるためです。

左外部結合は、これが NULL である行を作成します。「is null」以外の比較は、一致しません。

これを修正するには、次のようにします。

where coalesce(aid, ??) = ??

それがあなたのクエリの意図である場合。

または、別の方法は、クエリに group by がないことです。これを試して:

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 にあるものによってのみグループ化します。グループ化には何も指定していないため、すべてのデータに対して 1 つの行が生成されます。gid と name の値は、入力から任意に選択されます。

于 2012-08-13T21:17:58.477 に答える