GROUP BY查询未显示空类别

时间:2015-12-07 10:21:45

标签: mysql join group-by

我有以下

SELECT
        help_categories.helpCatId,
        help_categories.helpCatName,
        help_categories.helpCatSlug,
        COUNT(help_articles.helpArtCatId)
FROM
        help_categories
            JOIN
                help_articles
                    ON help_categories.helpCatId = help_articles.helpArtCatId
WHERE 
        help_categories.helpCatActive = 1
    AND
        help_articles.helpArtActive = 1
GROUP BY
        help_articles.helpArtCatId
ORDER BY
        help_categories.helpCatId ASC

此查询从数据库中选择所有帮助类别,并计算其中的所有文章。

问题:当一个类别有0篇文章时,它没有被提取。

这是一个很好的查询,还是有人知道更好的方法来做到这一点。所以我想要所有类别+每个类别中的文章数量(即使一个类别有0篇文章我还想从数据库中获取类别数据)。

提前致谢!

3 个答案:

答案 0 :(得分:2)

您的WHERE子句取消LEFT JOIN空值的工作:... AND help_articles.helpArtActive = 1。这需要一个" OR NULL":

应该是:

WHERE 
        help_categories.helpCatActive = 1
    AND
        (help_articles.helpArtActive = 1
         OR
         help_articles.helpArtActive IS NULL
         )

根据评论进行修改:

此外,GROUP BY help_articles.helpArtCatId会将help_articles.helpArtCatId NULL放到其他位置。可能希望改为GROUP BY help_categories.helpCatId

答案 1 :(得分:0)

你想要一个left join。这允许您从" left"中检索所有行。查询的一面,无论是否有"右边的#34;查询的一面。

答案 2 :(得分:0)

使用LEFT JOIN而不是JOIN。