当前位置:数据库 > > 正文

mysql按端口查找配置(MySQL中给定父行找到所有子行的解决方案)

时间:2021-11-03 15:52:33类别:数据库

mysql按端口查找配置

MySQL中给定父行找到所有子行的解决方案

前言

备注:测试数据库版本为MySQL 8.0

如需要scott用户下建表及录入数据语句,可参考:

scott建表及录入数据sql脚本

一.需求

找到直接及简介(即JONES下属的下属)为JONES工作的所有员工。

JONES下属的员工列表如下所示:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • ±------±-----+
  • | ename | lvl |
  • ±------±-----+
  • | JONES | 1 |
  • | SCOTT | 2 |
  • | FORD | 2 |
  • | ADAMS | 3 |
  • | SMITH | 3 |
  • ±------±-----+
  • 二.解决方案

    能够移到数的绝对顶部和底部是非常有用的。

    对于这个解决方案,不需要特殊的格式设置。目标只是返回位于员工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
  • 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
  • 测试记录:

  • ?
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 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给定父行找所有子行内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!

    原文链接:https://blog.csdn.net/u010520724/article/details/114128041

    标签:
    上一篇下一篇

    猜您喜欢

    热门推荐