MySQL中的树形查询

树形查询本质就是递归算法(自己调用自己),Oracle很早就支持了树形查询

MySQL中可以使用 WITH RECURSIVE 来实现树形查询

比如在Oracle中scott账户下,找出员工编号为7369所有的上级:

SQL> select empno, ename, job, mgr, level
  2    from emp
  3   start with empno = 7369
  4  connect by empno = prior mgr;
 
EMPNO ENAME      JOB         MGR      LEVEL
----- ---------- --------- ----- ----------
 7369 SMITH      CLERK      7902          1
 7902 FORD       ANALYST    7566          2
 7566 JONES      MANAGER    7839          3
 7839 KING       PRESIDENT                4

在MySQL8.0.19中:

mysql> WITH RECURSIVE x(empno,ename,job,mgr,lv) AS
    ->  (SELECT empno,ename,job,mgr,1 lv from emp where empno=7369
    ->  UNION ALL
    ->  select t1.empno,t1.ename,t1.job,t1.mgr,lv+1 from emp t1,x where t1.empno=x.mgr
    ->  )
    -> select * from x;
+-------+-------+-----------+------+------+
| empno | ename | job       | mgr  | lv   |
+-------+-------+-----------+------+------+
|  7369 | SMITH | CLERK     | 7902 |    1 |
|  7902 | FORD  | ANALYST   | 7566 |    2 |
|  7566 | JONES | MANAGER   | 7839 |    3 |
|  7839 | KING  | PRESIDENT | NULL |    4 |
+-------+-------+-----------+------+------+
4 rows in set (0.00 sec)

想不想成为SQL大神?想不想精通SQL优化,精通所有关系型数据库优化?

加我微信692162374 报名单独辅导 , 顺带我还可以教你Python,Oracle,MySQL,以及大数据

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值