SQL_递归查询(复杂查询示例)

时间:2022-09-25 00:16:33

需求: 一篇文章里有很多评论,每个评论又有很多回复评论,要求: 页面将文章展示出来,且文章的主评论按照评论时间分页展示,回复评论的评论完全展示在每个主评论下面,且按照回复时间排序

最终查询结果SQL查询结果如下:

Code: 评论编码,ParentCode:回复评论编码,num:主评论序号,lvl:评论层级,CreateTime:评论创建时间

SQL_递归查询(复杂查询示例)

SQL详细过程如下:

1-先创建我们的数据临时表作为基础数据:

a.ContentInfoCode为文章编码
SELECT * INTO #a FROM (
SELECT A.LikeNum, F.Title AS ContentTitle,A.CommentNum,A.ValidStatus, A.Code, E.CommentInfo as ReplayCommentInfo,A.CommentInfo,A.ParentCode, A.CreateTime ,B.LogoImageUrl ,( CASE WHEN D.Code IS NULL then '' else '' end) as IsLike ,C.LoginName,C.UserName,G.LoginName AS ReplyLoginName,G.UserName as ReplyUserName,f.ValidStatus as ContentValidStatus,a.ContentInfoCode
FROM [Content].Comment A LEFT JOIN [OAuth].[UserHeadPhoto] B ON A.Creator=B.UserID and B.[VersionEndTime]='9999-12-31 23:59:59'
LEFT JOIN [OAuth].[UserInfo] C ON (A.Creator=C.UserID and c.Status=1 )
left join [Content].[UserAction] D ON (A.Code=D.CommentCode AND D.ActionType=1 AND D.Creator='b231f35a76a346449b2f4c5ddb4f88e7' )
left Join [Content].Comment E ON A.ParentCode=E.Code left join [Content].[ContentInfo] F on a.ContentInfoCode =f.code left join [OAuth].[UserInfo] G ON (E.Creator=G.UserID and G.Status=1 )
WHERE 1=1 and a.ContentInfoCode='042f89bea6ee40f4968d2a219352f2f8'
) A

2-按照递归查询格式创建递归查询:

主评论集合--根数据--涉及表名:cte c,需要增加过滤条件:ParentCode IS NULL

子评论集合--子数据--涉及表名:#a,不加条件

with cte as
(
SELECT * FROM (
select *,0 as lvl,ROW_NUMBER() over(order by CreateTime desc ) num from #a
WHERE ParentCode IS NULL
) B WHERE B.num BETWEEN 1 AND 20 --主评论集合
union all
select #a.*,c.lvl+1,c.num --子评论要展示的列(lvl层级列,按照c.Code=#a.ParentCode每层级+1,子评论num列直接使用主评论序号)
from cte c
inner join #a on c.Code = #a.ParentCode --主评论和子评论关系
)
select * from cte ORDER BY num,CreateTime DESC --查询最终结果_按照主评论序号和创建时间排序

3-查询结果,并删除临时表:

select * from cte ORDER BY num,CreateTime DESC   --主评论和子评论关系
DROP TABLE #a   --删除临时表

SQL_递归查询(复杂查询示例)的更多相关文章

  1. Elasticsearch .Net Client NEST 多条件查询示例

    Elasticsearch .Net Client NEST 多条件查询示例 /// <summary> /// 多条件搜索例子 /// </summary> public c ...

  2. NHibernate查询示例合集

    基本查询   复杂查询示例 /// <summary> /// 获取自定义表单数据中属于部门的部分 /// </summary> /// <param name=&quo ...

  3. MyBatis 查询示例

    环境搭建 数据库schema 1)datasource.xml配置 <?xml version="1.0" encoding="UTF-8"?> & ...

  4. spring boot - 整合jpa多对对关系保存和查询示例

    pojo: package com.example.zs.springDataJpa; import org.hibernate.annotations.Proxy; import javax.per ...

  5. Elasticsearch 邻近查询示例

    Elasticsearch 邻近查询示例(全切分分词) JAVA API方式: SpanNearQueryBuilder span = QueryBuilders.spanNearQuery(); s ...

  6. Accessoft-日期区间段查询示例&comma;开始日期至截止日期区段查询

    Accessoft-日期区间段查询示例,开始日期至截止日期区段查询 实现功能效果如下: 示例查询开始日期为2017年3月15日到2017年3月16日的内容: sql查询语句如下: SELECT Inf ...

  7. SQL Server-简单查询示例(十一)

    前言 本节我们讲讲一些简单查询语句示例以及需要注意的地方,简短的内容,深入的理解,Always to review the basics. EOMONTH 在SQL Server 2012的教程示例中 ...

  8. Spring SimpleJdbcTemplate查询示例

    这里有几个例子来说明如何使用SimpleJdbcTemplate query()方法来查询或从数据库中提取数据.在 JdbcTemplate query() 方法,需要手动转换返回的结果转换为一个目标 ...

  9. mysql——单表查询——分组查询——示例

    一.基本查询语句 select的基本语法格式如下: select 属性列表 from 表名和视图列表 [ where 条件表达式1 ] [ group by 属性名1 [ having 条件表达式2 ...

随机推荐

  1. 【RoR win32】新rails运行后0&period;0&period;0&period;0:3000不能访问

    在浏览器中使用127.0.0.1:3000来访问

  2. sql基础,必须会的————随便整理、杂乱无章

    1.sqlserver2008r2的安装 2.数据库与表的建立.增加.删除.修改. 3,索引的概念,包括聚集与非聚集的区别.全文索引的建立与如何使用全文索引. 4,重新生成索引,重新组织索引. 5,建 ...

  3. Git 使用规范流程(转)

    团队开发中,遵循一个合理.清晰的Git使用流程,是非常重要的. 否则,每个人都提交一堆杂乱无章的commit,项目很快就会变得难以协调和维护. 下面是ThoughtBot 的Git使用规范流程.我从中 ...

  4. 【java】计算一段代码执行时长java&period;lang&period;System类里的public static long currentTimeMillis&lpar;&rpar;方法

    public class Test_currentTimeMillis { public static void main(String[] args) { long start=System.cur ...

  5. OpenCV3编程入门-读书笔记3-滤波

    一.领域滤波(卷积) 邻域算子值利用给定像素周围像素的值决定此像素的最终输出.如图左边图像与中间图像卷积得到右边图像.目标图像中绿色的像素由原图像中蓝色标记的像素计算得到. 通用线性邻域滤波是一种常用 ...

  6. win10释放的wifi热点手机连不上

    直入正题吧…… 在win10的搜索框里输入ser,找到“windows服务”选项,点击进入,如下图 找到下图所示的两个服务,然后,右键,属性,启动类型改为自动,然后点确定,确定完以后,再右键,点启动, ...

  7. Ajax&plus;PHP实现异步上传多张图片

    Ajax+PHP实现异步上传多张图片 HTML代码 <!-- date: 2018-04-27 13:46:55 author: 王召波 descride: 多张图片上传 --> < ...

  8. jmeter&plus;jdk 环境搭建

    1.安装jdk环境  https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html 划上重点,,,如果发现java -version不 ...

  9. WireShark抓包工具使用

    WireShark是一款网络封包分析软件,它抓取网络封包,并尽可能显示出最详细的封包资料. wireshark的准备工作 安装wireshark sudo apt-get install wiresh ...

  10. sublime text3 常用配置

    . 打开Preferences菜单,并选择 Browse Packages… . 系统会打开Sublime Text 的Packages文件夹,回到上一级菜单,然后打开Installed Packag ...