mysql 中怎样更新父行_MySQL 为给定父行找到所有子行

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

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

scott建表及录入数据sql脚本

一.需求

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

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

+-------+------+

| 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子句等。

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> 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)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值