解决MySQL给定父行找到所有子行的问题
2022-11-12 09:12:23
内容摘要
这篇文章主要为大家详细介绍了解决MySQL给定父行找到所有子行的问题,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随512笔记的小玲来看看吧!
前言
备注:
文章正文
这篇文章主要为大家详细介绍了解决MySQL给定父行找到所有子行的问题,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随数据库教程的小编来看看吧!
前言
备注:测试数据库版本为MySQL 8.0
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
一.需求
找到直接及简介(即JONES下属的下属)为JONES工作的所有员工。
JONES下属的员工列表如下所示:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 | <code> ±------±-----+ | ename | lvl | ±------±-----+ | JONES | 1 | | SCOTT | 2 | | FORD | 2 | | ADAMS | 3 | | SMITH | 3 | ±------±-----+ </code> |
MySQL中给定父行找到所有子行的解决方案
二.解决方案
能够移到数的绝对顶部和底部是非常有用的。
对于这个解决方案,不需要特殊的格式设置。目标只是返回位于员工JONES下属的所有员工,其中包括JONES自己。
这种类型的查询展示了递归SQL拓展的有用性,如Oracle的connect by和SQL Server/DB 2/MySQL 8.0的with子句等。
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <code> with recursive emp2(ename,empno,lvl) as ( SELECT ename,empno,1 lvl from emp where ename = 'JONES' union ALL select e1.ename,e1.empno,lvl + 1 from emp e1,emp2 e2 where e1.mgr = e2.empno ) select ename,lvl from emp2 </code> |
MySQL中给定父行找到所有子行的解决方案
测试记录:
代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | <code> mysql> with recursive emp2(ename,empno,lvl) as -> ( -> SELECT ename,empno,1 lvl -> from emp -> where ename = 'JONES' -> union ALL -> select e1.ename,e1.empno,lvl + 1 -> from emp e1,emp2 e2 -> where e1.mgr = e2.empno -> ) -> select ename,lvl from emp2; +-------+------+ | ename | lvl | +-------+------+ | JONES | 1 | | SCOTT | 2 | | FORD | 2 | | ADAMS | 3 | | SMITH | 3 | +-------+------+ 5 rows in set (0.01 sec) </code> |
MySQL中给定父行找到所有子行的解决方案
总结
到此这篇关于MySQL中给定父行找到所有子行的文章就介绍到这了,更多相关MySQL给定父行找所有子行内容请搜索512笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持512笔记!
注:关于解决MySQL给定父行找到所有子行的问题的内容就先介绍到这里,更多相关文章的可以留意
代码注释