3

私はテーブル users を持っています:

user_id    name
1          John
2          Dan
3          Jane
4          Sophie
5          Jodie

次に、associates という名前のテーブルを作成します。

user_id    assoc_id
1          2
1          3 
3          4
3          1
3          5
4          1
5          1
5          2

私がやりたいのは、各ユーザーが何人の仲間を持っているか、またはまったくいないかを示すことです

したがって、結果は次のようになります

user_id    Name     Number of Associates
1          John     2
2          Dan      0
3          Jane     3
4          Sophie   1
5          Jodie    2

私が試していることは機能しますが、0のものは表示されません

これが私が試みていることです。どうすれば0を取得できますか?

SELECT u.user_id, u.name, count(a.user_id) as howmany from users u
join associates a on a.user_id = u.user_id
group by u.user_id order by u.user_id asc
4

4 に答える 4

3

LEFT OUTER JOIN が必要です:

SELECT u.user_id, u.name, count(a.user_id) as howmany 
FROM users u LEFT OUTER JOIN associates a 
ON a.user_id = u.user_id
GROUP BY u.user_id 
ORDER BY u.user_id ASC

LEFT OUTER JOIN結合されたテーブルに存在しない場合でも、最初のテーブルのすべての行が含まれます。

于 2012-12-19T15:37:24.567 に答える
1

これを試して :

    SELECT u.user_id, 
    u.name, 
    count(a.user_id) as howmany 
    FROM users u 
    LEFT OUTER JOIN associates a 
    ON a.user_id = u.user_id
    GROUP BY u.user_id 
    ORDER BY u.user_id ASC
于 2012-12-19T15:47:57.050 に答える
0

内部結合の代わりに左結合を使用してみてください。対応する関連付けがない行を選択する必要があります。

SELECT u.user_id, u.name, count(a.user_id) as howmany 
from users u
left join associates a 
  on a.user_id = u.user_id
group by u.user_id 
order by u.user_id asc
于 2012-12-19T15:37:49.680 に答える
0

これは厳密なルールでも機能します(タイプミスがなければ):

SELECT   users.*, ISNULL(associatesCount.AssocCount, 0) AS AssocCount
FROM    users
LEFT JOIN (
        SELECT user_id, COUNT(*) AS AssocCount
        FROM associates
        GROUP BY user_id
        ) AS associatesCount
        ON users.user_id = associatesCount.user_id
于 2012-12-19T15:48:57.550 に答える