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