有科室表host_dept字段如下:
dept_id(部门id) dept_name(部门名称) parent_id(父级的部门id) level(部分级别 例:当前部门级别为2,则父级为1)
需求如下:一个医院有多个心理科分别属于不同部门(门诊部门、住院部门等)需要将每个心理科的父级也展示出来用于区分
WITH RECURSIVE tree_cte as ( select d.*,d.dept_id as deptId from hos_dept d where d.dept_name='心理科' UNION ALL select t.*,tcte.deptId from hos_dept t inner join tree_cte tcte on t.dept_id = tcte.parent_id ) SELECT deptId,GROUP_CONCAT(dept_name order by level asc separator '/') as deptNam from tree_cte group by deptId
结果:
如果门诊部门、行政部门...也有父级 也会拼接到前面(医院/门诊部门/心理科)
关于mysql8.0递归用法可以参考 https://www.cnblogs.com/blwy-zmh/p/13895299.html