You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL关联查询需求:获取所有帖子及已审核评论数

问题分析与解决方案

你的问题出在WHERE子句的过滤条件上:当使用LEFT JOIN时,没有匹配到符合条件评论的帖子(比如sample3),c.is_approved会是NULL,而WHERE c.is_approved=1会直接把这些行过滤掉,所以你看不到sample3的记录。

你的表结构

Posts表

  • id
  • title

Comments表

  • id
  • post_id(外键关联Posts表)
  • is_approved
  • comment

示例数据

Posts表

idtitle
1sample1
2sample2
3sample3

Comments表

idpost_idis_approvedcomment
111hello
221hi

修正后的查询语句

把is_approved=1的条件移到JOIN的ON子句里,同时调整GROUP BY的分组依据为帖子的唯一标识,这样就能保留所有帖子并统计符合条件的评论数:

SELECT 
    p.title,
    COUNT(c.post_id) AS total
FROM posts AS p
LEFT JOIN comments AS c 
    ON p.id = c.post_id 
    AND c.is_approved = 1  -- 将审核条件放在JOIN关联规则中
GROUP BY p.id, p.title  -- 基于帖子自身的字段分组,确保无评论的帖子也被保留

改动原因说明

  1. 条件位置调整:把审核条件放在ON子句时,LEFT JOIN会保留所有帖子行,仅关联符合条件的评论,不符合条件的评论不会被关联,对应字段为NULL,不会过滤掉无评论的帖子。
  2. 分组依据调整:用p.id和p.title分组,确保每个帖子作为独立分组,即使没有匹配的评论也会被统计。
  3. COUNT函数特性:COUNT(c.post_id)会自动忽略NULL值,所以无符合条件评论的帖子会返回0,正好满足你的需求。

最终输出结果

执行上述查询后,你会得到期望的结果:

titletotal
sample11
sample21
sample30

内容的提问来源于stack exchange,提问作者shamon shamsudeen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:42:35