MySQL中给定父行找到所有子行的解决方案
前言
备注:测试数据库版本为MySQL8.0
如需要scott用户下建表及录入数据语句,可参考:
scott建表及录入数据sql脚本
一.需求
找到直接及简介(即JONES下属的下属)为JONES工作的所有员工。
JONES下属的员工列表如下所示:
±------±-----+ |ename|lvl| ±------±-----+ |JONES|1| |SCOTT|2| |FORD|2| |ADAMS|3| |SMITH|3| ±------±-----+
二.解决方案
能够移到数的绝对顶部和底部是非常有用的。
对于这个解决方案,不需要特殊的格式设置。目标只是返回位于员工JONES下属的所有员工,其中包括JONES自己。
这种类型的查询展示了递归SQL拓展的有用性,如Oracle的connectby和SQLServer/DB2/MySQL8.0的with子句等。
withrecursiveemp2(ename,empno,lvl)as ( SELECTename,empno,1lvl fromemp whereename='JONES' unionALL selecte1.ename,e1.empno,lvl+1 fromempe1,emp2e2 wheree1.mgr=e2.empno ) selectename,lvlfromemp2
测试记录:
mysql>withrecursiveemp2(ename,empno,lvl)as ->( ->SELECTename,empno,1lvl ->fromemp ->whereename='JONES' ->unionALL ->selecte1.ename,e1.empno,lvl+1 ->fromempe1,emp2e2 ->wheree1.mgr=e2.empno ->) ->selectename,lvlfromemp2; +-------+------+ |ename|lvl| +-------+------+ |JONES|1| |SCOTT|2| |FORD|2| |ADAMS|3| |SMITH|3| +-------+------+ 5rowsinset(0.01sec)
总结
到此这篇关于MySQL中给定父行找到所有子行的文章就介绍到这了,更多相关MySQL给定父行找所有子行内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。