【问题标题】:MySQL joins count matched record from another table but I need ZERO values alsoMySQL 从另一个表连接计数匹配记录,但我也需要零值
【发布时间】:2014-08-27 19:05:36
【问题描述】:

我的查询目标是:通过 1 个查询从文章表中获取列加上为每篇文章编写的 cmets 数。 (我有一个单独的 cmets 表,两个表都是 My_ISAM)如果任何文章没有 cmets,那么它也应该算为零。

在 SO 上将接受的答案参数从this question 转换为我的需要,我得到了以下解决方案:

我的不足查询是:

SELECT t1.id, t1.title, count(*) AS `count_of_comments` 
FROM articles t1 
JOIN comments t2 ON t1.id = t2.commented_article_id 
GROUP BY t1.id, t1.title 
LIMIT 0,30

这个查询给了我 2 个结果行,但是我有 3 篇文章,我需要得到所有这些。 (1 篇文章没有 cmets)

我的要求是否可以通过编辑上面的查询来实现,如果可以,您能帮我吗?

【问题讨论】:

    标签: mysql sql join count


    【解决方案1】:

    使用left join 并计算匹配项:

    SELECT t1.id, t1.title, count(t2.commented_article_id) AS `count_of_comments` 
    FROM articles t1 LEFT JOIN
         comments t2
         ON t1.id = t2.commented_article_id 
    GROUP BY t1.id, t1.title 
    LIMIT 0, 30;
    

    【讨论】:

    • 戈登,我在我拥有的 2 张桌子上使用了你的方法 - 并获得 0 值计数。直到我添加一个 WHERE 子句来限制查询(在 GROUP BY 之前)——然后我只得到一个至少有 1 个计数的列表。知道为什么吗?
    • @user3741598 。 . .是的。这是因为limit 子句。删除limit,您将看到完整的结果集。
    • Gordon,我最终切换到 count(if('where conditions here', 1, NULL)) 并以 0 值实现了我需要的输出。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-15
    • 1970-01-01
    • 1970-01-01
    • 2014-02-07
    • 1970-01-01
    相关资源
    最近更新 更多