背景

开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用Mysql数据库,版本为8.0

  • Oracle数据库中可使用START [Param] CONNECT BY PRIOR
  • Mysql 中需要使用 WITH RECURSIVE

需求

找到name为张三的孩子和孙子,pid为当前记录的父id,如张三儿子的pid为张三的id,以此类推。

在这里插入图片描述

引入

计算1到100的累加的结果。
WITH RECURSIVE t(n) AS ( //t为我们结果表,n为字段,可以只指定表明不指定字段
  VALUES (1) //递归的开始,此时可理解为t表字段n只有一条记录 1
 UNION ALL
  SELECT n+1 FROM t WHERE n < 100 /*这里产生的结果为 2 ,此时t表的字段n有两条记录分别为1,2 * 3 * ... * 100 */ ) SELECT sum(n) FROM t; //对字段n求和

父求子

WITH RECURSIVE temp AS ( // 将结果表命名为temp
	SELECT * FROM resource r WHERE r.name ='张三' //查询出父id这条记录,此时这条记录已存在temp表中 ,如图1-1
	UNION ALL
	/*这时要注意,下面这条sql是获取的期望结果中的后两条记录(不包含第一条)
	*注意where后的条件,我们使用temp表中的唯一一条记录的id关联resource表中的pid
	*仅当temp第一条记录匹配不到resource表中的pid时才会对temp的第二条记录id进行匹配
	*/
	SELECT r.* FROM resource r,temp t WHERE t.id = r.pid
)select * from temp

在这里插入图片描述

子查父

WITH recursive temp AS (
	SELECT * FROM resource r WHERE r.name ='张三孙子'
	UNION ALL
	//已知的是子集,所以我们需要通过temp的pid匹配resource的id
	SELECT r.* FROM resource r,temp t WHERE t.pid = r.id
)select * from temp

在这里插入图片描述

到此这篇关于MySql8 递归查询父子集的方法的文章就介绍到这了,更多相关MySql8 递归查询父子集内容请搜索乐虎体育以前的文章或继续浏览下面的相关文章希望大家以后多多支持乐虎体育!

MySql8 WITH RECURSIVE递归查询父子集的方法的更多相关文章

  1. 白日梦的Elasticsearch系列笔记(一)基础篇

    目录一、导读1.1、认识ES1.2、安装、启动ES、Kibana、IK分词器二、核心概念2.1、Near Realt......

  2. MYSQL 字符集设置(终端的字符集)

    每次利用终端 创建数据库或者创建表的时候,字符集都是latin1(不指定字符集的时候)如下:查看当前数据库的字符集c......

  3. MongoDB备份(mongoexport)与恢复(mongoimport)

    1.备份恢复工具介绍:mongoexport/mongoimportmongodump/mongorestore(本......

  4. MySql8 WITH RECURSIVE递归查询父子集的方法

    背景开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用Mysql数据库......

  5. 阿里面试:MySQL如何设计索引更高效?

    前言数据库系列更新到现在我想大家对所有的概念都已有个大概认识了,这周我在看评论的时候我发现有个网友的提问我觉得很有意......

  6. 深入了解MySQL主从复制的原理

    欢迎微信关注「SH的全栈笔记」0. 主从复制首先主从复制是什么?简单来说是让一台MySQL服务器去复制另一台MySQ......

随机推荐

  1. 动态主机配置协议DHCP

    一---导读在日常生活中我们使用电脑,当我们连接到一个新的网络的时候,你知道中间发生了什么,最终你可以上网的吗?一个......

  2. 前端性能优化小纪

    天下武功,无坚不破,唯快不破。对前端而言,快意味着要求资源体量更小、数量更精简、内容更早呈现、交互更加人性化。当项目......

  3. python画图时设置分辨率和画布大小的实现(plt.figure())

    本文介绍了python画图时设置分辨率和画布大小的实现,主要使用plt.figure(),下面就一起来了解一下plt......

  4. C#扫盲篇(四):.NET Core 的异步编程-只讲干货(async,await,Task)

    关于async,await,task的用法和解释最精简的说明关于async,await,task的用法和解释这里就不......

  5. Python抓取淘宝IP地址数据

    def fetch(ip):url = 'http://ip.taobao.com/service/getIpInf......

  6. c#发送请求访问外部接口的实例

    我就废话不多说了,大家还是直接看代码吧~string url = "https://cloud.soei.......

  7. Python基础(中篇)

    数据类型的常用方法,条件语句,循环语句。本篇文章主要内容:数据类型的常用方法,条件语句,循环语句。在开始正篇之前我们......

  8. python用分数表示矩阵的方法实例

    前言在机器学习中,我们会经常和矩阵打交道。在矩阵的运算中,python默认的输出是浮点数,但是如果我们想要矩阵的元素......

  9. Python+MySQL随机试卷及答案生成程序

    一、背景本文章主要是分享如何使用Python从MySQL数据库中面抽取试题,生成的试卷每一份都不一样。二、准备工作1......

  10. C#实现简单的五子棋游戏

    最近利用业余时间写了一个简单的五子棋游戏,没有利用深层次的面向对象技术,自学一年,代码和程序设计有不妥之处,还望大神......