时间:2021-05-02
背景
开发过程中遇到类似评论的功能是,需要时用查询所有评论的子集。不同数据库中实现方式也不同,本文使用mysql数据库,版本为8.0
需求
找到name为张三的孩子和孙子,pid为当前记录的父id,如张三儿子的pid为张三的id,以此类推。
引入
? 1 2 3 4 5 6 7 8 9 10 11 12 计算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求和父求子
? 1 2 3 4 5 6 7 8 9 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
子查父
? 1 2 3 4 5 6 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 递归查询父子集内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!
原文链接:https://blog.csdn.net/dylan95/article/details/105739504
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
MySQL8带来了全新的体验,比如支持NoSQL、JSON等,拥有比MySQL5.7两倍以上的性能提升。本文讲解如何在Windows下安装MySQL8,以及基本
mysql有必要升级到第8版本。相较于之前的版本,mysql8增加多种新特性,同时也提高了软件各方面的速度。除此之外,mysql8还增加了开窗函数,可以让用户获
MySQL8正式版8.0.11已发布,官方表示MySQL8要比MySQL5.7快2倍,还带来了大量的改进和更快的性能!以下为本人2018.4.23日安装过程的记
array_walk_recursive对数组中的每个成员递归地应用用户函数基本语法boolarray_walk_recursive(array&$input,
1官网下载MySQL8安装MySQL8下载地址这个下载的是一个压缩包,下载后解压到指定目录即可。2配置环境变量在环境变量Path里加D:\Development