mysql递归查询部门层级

  1. 公用表表达式-CTE 公用表表达式是一个命名的临时结果集,不作为对象存储,只在执行期间存在。

CTE基本语法:

with cite_name as
(
    query
)
select *
from cite_name
;
  1. CTE的递归查询 CTE的递归查询就是需要不断的去“引用”CTE本身。

基本语法:

with recursive cte_name as
(
    initial_query     -- anchor member
    union all
    recursive_query -- 引用CTE名称的递归成员
)
select * 
from cte_name
;

CTE递归查询主要有三部分:

① 初始查询,形成递归查询的初始结果集 ② 递归查询部分,引用CTE名称的查询 ③ 终止条件,确保查询在不满足条件时终止 输出结果:

+---+
| n |
+---+
| 1 |
| 2 |
| 3 |
+---+
3 rows in set (0.01 sec)

注意:

递归部分,不能使用 聚合函数,distinct ,group by 子句, order by 子句,limit子句。

测试语句:

with recursive party_detail as
( 
select id, depart_name, depart_name as dept_structure
from ent_department
where id=100     -- 根部门ID
 
union
 
select a.id ,a.depart_name, concat(b.dept_structure,  > , a.depart_name) as dept_structure
from party_detail as b 
join ent_department as a on b.id=a.parent_id
)
select *
from party_detail
;

效果:

经验分享 程序员 微信小程序 职场和发展