MySQL递归查询
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递归查询的更多相关文章
- 包含mysql 递归查询父节点 和子节点
包含mysql 递归查询父节点 和子节点 mysql递归查询,查父集合,查子集合 查子集合 --drop FUNCTION `getChildList` CREATE FUNCTION `getChi ...
- MySQL递归查询_函数语法检查_GROUP_CONCAT组合结果集的使用
1-前言: 在Mysql使用递归查询是很不方便的,不像Sqlserver可以直接使用声明变量,使用虚拟表等等.如:DECLARE,BEGIN ... END ,WHILE ,IF 等等. 在My ...
- MySQL递归查询树状表的子节点、父节点具体实现
mysql版本(5.5.6等等)尚未支持循环递归查询,和sqlserver.oracle相比,mysql难于在树状表中层层遍历的子节点.本程序重点参考了下面的资料,写了两个sql存储过程,子节点查询算 ...
- 递归的实际业务场景之MySQL 递归查询
喜欢就点个赞呗! 源码<--请点击此处查看 引入 当我看到一些评论时,例如下面的样子.我挺好奇这个功能是怎么样做出来的.进过查阅资料,发现这其实是 MySQL 的递归操作.下面就让我操作一下怎么 ...
- mysql 递归查询
1.创建表: DROP TABLE IF EXISTS `t_areainfo`; CREATE TABLE `t_areainfo` ( `id` ) ' AUTO_INCREMENT, `) ', ...
- MySQL递归查询所有子节点,树形结构查询
--表结构 CREATE TABLE `address` ( `id` int(11) NOT NULL AUTO_INCREMENT, `code_value` varchar(32) DEFAUL ...
- MySQL递归查询树状表的子节点、父节点
表结构和表数据就不公示了,查询的表user_role,主键是id,每条记录有parentid字段; 如下mysql查询函数即可实现根据一个节点查询所有的子节点,根据一个子节点查询所有的父节点.对于数据 ...
- mysql 递归查询 主要是对于层级关系的查询
最近遇到了一个问题,在mysql中如何完成节点下的所有节点或节点上的所有父节点的查询?在Oracle中我们知道有一个Hierarchical Queries可以通过CONNECT BY来查询,但是,在 ...
- MySQL递归查询父子节点
1.表结构 CREATE TABLE folder( id BIGINT(20) NOT NULL, parent_id BIGINT(20) DEFAULT NULL, PRIMARY KEY id ...
随机推荐
- 无向图双连通分量BCC(全网最好理解)
不是标题党,之前我也写过一篇比较全的,但是对于初学者不友好.传送门? 双连通分量(Biconnected component): 1.边双联通 E-BCC 2.点双连通 V-BCC 双 ...
- 【Hadoop离线基础总结】CDH版本Hadoop 伪分布式环境搭建
CDH版本Hadoop 伪分布式环境搭建 服务规划 步骤 第一步:上传压缩包并解压 cd /export/softwares/ tar -zxvf hadoop-2.6.0-cdh5.14.0.tar ...
- matlab 提示 Continuous sample time is not supported by discrete derivative 错误的解决办法
Simulink仿真的时候,出行错误提示:Continuous sample time is not supported by discrete derivative 中文意思是:连续采样时间不支持离 ...
- Algorithms - Priority Queue - 优先队列
Priority queue - 优先队列 相关概念 Priority queue优先队列是一种用来维护由一组元素构成的集合S的数据结构, 其中的每一种元素都有一个相关的值,称为关键字(key). 一 ...
- CF-448C Painting Fence 分治
Painting fence 题意 乍一看以为是之前做过的一道单调队列优化的DP,不是. 也是有n块木板,每个木板宽1米,有一个高度ai,现在要把他们刷成橘色,给了你一个宽一米的刷子,你可以横着刷,或 ...
- react-grid-layout实现拖拽,网格布局
借鉴地址:https://www.jianshu.com/p/b48858eee3a7 安装 react-grid-layout npm install react-grid-layout impor ...
- scikit-learn 梯度提升树(GBDT)调参笔记
在梯度提升树(GBDT)原理小结中,我们对GBDT的原理做了总结,本文我们就从scikit-learn里GBDT的类库使用方法作一个总结,主要会关注调参中的一些要点. 1. scikit-learn ...
- ORACLE 统计文件后缀SQL
ORACLE 统计文件后缀SQL查询语句 select lower(substr(file_name,instr(file_name, '.', -1),length(file_name))),cou ...
- python实现简单投资复利函数以及实现摇骰子猜大小函数
复利函数: #!/user/bin/env python #-*-coding:utf-8 -*- #Author: qinjiaxi def invest(amount, rate, time): ...
- k8s big-ip control 安装使用
k8s big-ip control 安装使用 0. 准备工作 网络打通,这里没有使用fannel,没有使用vxlan . 在f5界面 创建f5分区.这里是cce-test. 1. 安装bigip c ...