MySQL8.0已经支持CTE递归查询,举例说明
CREATE TABLE EMP
(EMPNO integer NOT NULL,
ENAME VARCHAR(10),
JOB VARCHAR(9),
MGR integer,
HIREDATE DATE,
SAL integer,
COMM integer,
DEPTNO integer); INSERT INTO EMP VALUES (7369,'SMITH','CLERK',7902,'1980-12-17',800, NULL, 20);
INSERT INTO EMP VALUES (7499,'ALLEN','SALESMAN',7698,'1981-2-20', 1600,300, 30);
INSERT INTO EMP VALUES (7521,'WARD', 'SALESMAN',7698, '1981-2-22', 1250,500, 30);
INSERT INTO EMP VALUES (7566,'JONES','MANAGER', 7839, '1981-4-2',2975, NULL, 20);
INSERT INTO EMP VALUES (7654,'MARTIN', 'SALESMAN',7698, '1981-9-28', 1250, 1400, 30);
INSERT INTO EMP VALUES (7698,'BLAKE','MANAGER', 7839, '1981-5-1',2850, NULL, 30);
INSERT INTO EMP VALUES (7782,'CLARK','MANAGER', 7839, '1981-6-9',2450, NULL, 10);
INSERT INTO EMP VALUES (7788,'SCOTT','ANALYST', 7566, '1982-12-9', 3000, NULL, 20);
INSERT INTO EMP VALUES (7839,'KING', 'PRESIDENT', NULL, '1981-11-17', 5000, NULL, 10);
INSERT INTO EMP VALUES (7844,'TURNER', 'SALESMAN',7698, '1981-9-8',1500,0, 30);
INSERT INTO EMP VALUES (7876,'ADAMS','CLERK',7788, '1983-1-12', 1100, NULL, 20);
INSERT INTO EMP VALUES (7900,'JAMES','CLERK',7698, '1981-12-3', 950, NULL, 30);
INSERT INTO EMP VALUES (7902,'FORD', 'ANALYST', 7566, '1981-12-3',3000, NULL, 20);
INSERT INTO EMP VALUES (7934,'MILLER', 'CLERK',7782, '1982-1-23', 1300, NULL, 10);

SQL建表语句

在EMP表中存在着树形结构,比如员工JONES,他是SOCTT的mgr,而SCOTT又是ADAMS的mgr,即JONES→SOCTT→ADAMS

由于树的深度不确定,用递归可以避免这个问题,MySQL会帮我们遍历整个树形结构,当遍历结束,会自动退出递归。

问题1:查询员工JONES的所有下属员工,包括下属的下属

with recursive temp(ename,empno)
as
(
select ename,empno
from emp
where ename = 'JONES' union all select p.ename,p.empno
from temp,emp p
where temp.empno = p.mgr
)
select empno,ename from temp;

向下遍历树

+-------+-------+
| empno | ename |
+-------+-------+
| 7566 | JONES |
| 7788 | SCOTT |
| 7902 | FORD |
| 7369 | SMITH |
| 7876 | ADAMS |
+-------+-------+

问题2:查询员工ADAMS的所有上级

with recursive temp(ename,mgr)
as
(
select ename,mgr
from emp
where ename = 'ADAMS' union all select p.ename,p.mgr
from temp,emp p
where temp.mgr = p.empno
)
select ename,mgr from temp;

向上遍历树

+-------+------+
| ename | mgr |
+-------+------+
| ADAMS | 7788 |
| SCOTT | 7566 |
| JONES | 7839 |
| KING | NULL |
+-------+------+

MySQL递归查询的更多相关文章

  1. 包含mysql 递归查询父节点 和子节点

    包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...

  2. MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集的使用

    1-前言: 在Mysql使用递归查询是很不方便的,不像Sqlserver可以直接使用声明变量,使用虚拟表等等.如:DECLARE,BEGIN ...  END   ,WHILE ,IF 等等. 在My ...

  3. MySQL递归查询树状表的子节点、父节点具体实现

    mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...

  4. 递归的实际业务场景之MySQL 递归查询

    喜欢就点个赞呗! 源码<--请点击此处查看 引入 当我看到一些评论时,例如下面的样子.我挺好奇这个功能是怎么样做出来的.进过查阅资料,发现这其实是 MySQL 的递归操作.下面就让我操作一下怎么 ...

  5. mysql 递归查询

    1.创建表: DROP TABLE IF EXISTS `t_areainfo`; CREATE TABLE `t_areainfo` ( `id` ) ' AUTO_INCREMENT, `) ', ...

  6. MySQL递归查询所有子节点,树形结构查询

    --表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...

  7. MySQL递归查询树状表的子节点、父节点

    表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ...

  8. mysql 递归查询 主要是对于层级关系的查询

    最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在 ...

  9. MySQL递归查询父子节点

    1.表结构 CREATE TABLE folder( id BIGINT(20) NOT NULL, parent_id BIGINT(20) DEFAULT NULL, PRIMARY KEY id ...

随机推荐

  1. 带权并查集--hdu3047 ZJnu stadium

    题意:给出一个n,m,n表示的是有n 个人,m表示的是 有m 对关系: 接下来输入的就是这m对关系,a,b,x:表示的是a,b相距x个距离:然后判断输入的是否与这个数的上面的数信息一致, 输出不一致的 ...

  2. 无向图求割点(找桥)tarjan

    本博客参考了李煜东的<算法竞赛进阶指南>,大家要是觉得这篇文章写的不错请大家支持正版.豆瓣图书 我在之前的博客中讲解了搜索序时间戳,这次我们讲讲追溯值的概念. 追溯值: 设subtree( ...

  3. Top 命令数据分析

    一.top 命令详解 当前时间 20:27:12 当前系统运行时间 3:18秒 1个用户 系统负载平均长度为 0.00,0.00,0.00(分别为1分钟.5分钟.15分钟前到现在的平均值) 第二行为进 ...

  4. SVN 应用

    1.从服务器上down 资料 在电脑上安装SVN客户端 在电脑本地创建个文件夹作为版本库 进入 xfssvn 文件夹右击鼠标选择 SVN Checkout 或 SVN Update 输入服务器中配置好 ...

  5. Android控件重叠显示小记

    方案一 利用布局控件显示优先级 在xml中RelativeLayout,FrameLayout,靠后的控件显示在上层. 利用margin属性 margin属性可以控制控件间的距离,属性值为正值时,越大 ...

  6. Nginx入门资料

    最近在学习Nginx,记录一下自己的学习历程. 1. Nginx开发从入门到精通 (淘宝技术团队编写,值得一看) 2. <深入理解Nginx:模块开发与架构解析> 3. Nginx模块开发 ...

  7. jQuery简单竖排手风琴折叠菜单代码

    项目需求1.刚开始只显示,每个标题, 2.让每个 li列表隔行换色 3.当我点击某个标题时,下面的列表会缓慢的展开,其他列表展开的内容会收起 <!DOCTYPE html> <htm ...

  8. 王颖奇 20171010129《面向对象程序设计(java)》第十五周学习总结

    实验十五  GUI编程练习与应用程序部署 实验时间 2018-12-6 学习总结: 理论部分: ◼ JAR文件◼ 应用程序首选项存储◼ Java Web Start JAR文件: 1.Java程序的打 ...

  9. LeetCode--Array--Remove Duplicates from Sorted Array (Easy)

    26. Remove Duplicates from Sorted Array (Easy) Given a sorted array nums, remove the duplicates in-p ...

  10. 计算机网络——简单说说WebSocket协议

    一.前言   之前做了一个Web小项目,需要实现后端持续给前端推送消息的功能,当时最开始使用的是轮询实现,但是效率太低,对资源消耗也大.之后为了解决这个问题,上网查阅资料后,改用了WebSocket实 ...