将RIGHT JOIN与COUNT相结合

时间:2013-03-22 02:39:40

标签: mysql join

我正在尝试获取每个用户在changes_cc表中的条目数列表。并非所有用户都对其进行了输入,但由于某种原因,对于每个有0个条目的用户,它返回“1”。我假设这是因为它正在计算JOIN ed表中的条目。我怎样才能使它变为“0”呢?

SELECT COUNT(*) as num, users.id, realname, username
            FROM changes_cc
            RIGHT JOIN users
                ON changes_cc.user_id = users.id
            GROUP BY users.id

3 个答案:

答案 0 :(得分:3)

我认为这应该有效 - 计算changes_cc表中的特定字段与计数*:

SELECT u.id, realname, username, COUNT(c.id) as num
FROM users u 
    LEFT JOIN changes_cc c 
        ON u.user_id = c.id
GROUP BY u.id

我更喜欢在LEFT JOIN上阅读RIGHT JOIN,但它们都是OUTER JOINs并且工作原理相同。

答案 1 :(得分:2)

您不应该使用COUNT(*)计算包含空值的记录),因为它通常会提供至少1,因为它会返回右表中的所有记录。如果您指定要计算的列名称,它会为您提供所需的结果,因为COUNT仅计算 NON_NULL 值。

SELECT  COUNT(changes_cc.user_id) as num, 
        users.id, 
        realname, 
        username
FROM    changes_cc
        RIGHT JOIN users
            ON changes_cc.user_id = users.id
GROUP   BY users.id

答案 2 :(得分:1)

不使用count(*),而是使用count(changes_cc.user_id)

问题在于您计算行数(使用*)而不是计算“右连接”表中的非NULL值。