mysql递归查询部门层级
- 公用表表达式-CTE 公用表表达式是一个命名的临时结果集,不作为对象存储,只在执行期间存在。
CTE基本语法:
with cite_name as ( query ) select * from cite_name ;
- 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 ;
效果: