mysql没有记录的给0_php – 如果没有找到记录,MySQL计数不返回0

本文详细介绍了SQL查询中LEFT JOIN与COUNT()函数的结合使用。通过LEFT JOIN,可以确保获取所有帖子的数据,即使某些帖子没有关联的评论。COUNT()函数则用于统计每个帖子的评论数量。当将JOIN类型改为LEFT JOIN时,对于没有评论的帖子,COUNT()会返回0。文章还讨论了LEFT JOIN相对于子查询的性能优势,并提醒读者在适当情况下避免使用子查询。
摘要由CSDN通过智能技术生成

所以当你这样做时(这就是你所做的,为JOIN重新制定):

SELECT post.post_id, COUNT(comment)

FROM `comment`

INNER JOIN post ON `comment`.post_id = post.post_id

GROUP BY post.post_id;

您只收集在评论中至少有一个引用的帖子行.

如果将JOIN类型更改为LEFT联接,则这样:

SELECT post.post_id, COUNT(comment)

FROM `comment`

LEFT JOIN post ON `comment`.post_id = post.post_id

GROUP BY post.post_id;

然后post中的行都在那里,如果没有与该行相关的注释(这是左连接),则为注释列插入NULL值.因此,如果comment是表注释中的一列,它将存在于post表的每一行,但是具有NULL值,在post_id列上的group by之后,与此帖相关的注释子集仅包含1 NULL值,计数应该返回0.

select count(NULL);

返回0.

现在你可以使用一个子查询,但这是一个非常糟糕的主意,子查询通常是完成而不是LEFT JOINS,通常这是一个错误,有时它不是,但它通常是一个错误.当您执行左连接时,索引用于比较2个表的键值(ON子句)并构建一个最终的’临时’行结果,混合来自两个表的值(然后,或者可能在同一时间,应用查询其他部分的过滤器).当您使用子查询时,对于第一个表的每一行,运行一个新查询以从第二个表中获取结果(并非总是如此,但这是另一个问题),数据库引擎的成本实际上要大得多.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值