现在我们要写一段查询,找出一组评论,里面要包含评论被回复的数量,有两种方法,一种是用 LEFT JOIN,还有一种就是用一段子查询。先看一下怎么用 LEFT JOIN 统计评论被回复的数量。
打开 SQL 窗口,输入 SELECT 选择 comment.id,comment.content ,FROM comment 数据表。然后用 LEFT JOIN 拼接一个数据表,拼接的就是 comment 这个数据表,这里要给它起个别名,比如 commentReply
在 ON 的后面设置一下合并的条件,commentReply.parentId 等于 comment.id ,你会发现在结果里面 id=1 的这条评论出现了很多次,这是因为这条评论被回复了很多次。
在查询里用 WHERE 设置一个条件,条件是 comment.id 等于 1 。 然后在 SELECT 语句的下面,再用一个 COUNT ,做一下统计,给结果起个名字叫 totalReplies 。用 COUNT 统计一下 commentReply 的 id ,它的前面可以加上 DISTINCT 去掉重复。
查询的结果里面会出现一个 totalReplies ,这个栏目的值就是这条评论的回复数量。
下面再看一下用子查询统计评论的回复的数量,去掉这段查询里的 LEFT JOIN, 然后去掉 SELECT 下面的 COUNT,留下这组括号,还有给这个栏目起的这个名字。
在括号里写一段子查询,SELECT COUNT 一下 reply 的 id ,FROM 来自 comment 数据表,给这个表起个别名叫 reply ,在 WHERE 的后面设置一下查询条件,条件是 reply 里的 parentId 等于 comment 表里的 id 栏目的值。
执行一下,在查询的结果里面仍然会包含这个 totalReplies ,它的值就是这个评论的回复数量。
打开 comment 数据表,这里有一条评论回复的是 id=4 的这条评论, 回到 SQL 窗口,修改一下查询条件 comment.id 等于 4 ,执行一下。 这里会显示 id=4 的这条评论有一条回复。