部门表中有部门id和pid 如何根据所在部门id去查询所有上级部门 Mysql 50版本用sql实现
可以使用递归查询实现,以下是一个示例SQL语句:
WITH RECURSIVE department_tree AS ( SELECT id, name, pid FROM department WHERE id = [所在部门id] UNION ALL SELECT d.id, d.name, d.pid FROM department d JOIN department_tree dt ON d.id = dt.pid ) SELECT * FROM department_tree;
解释:
- CTE部分:使用WITH关键字定义一个递归公共表达式,命名为department_tree。首先查询所在部门的记录,作为递归的起点。
- UNION ALL部分:使用UNION ALL关键字将当前部门和其父部门连接起来,递归查询所有父部门。
- SELECT部分:从递归查询得到的department_tree表中获取所有记录。
注意事项:
- 该语句只适用于MySQL 8.0及以上版本,因为使用了CTE和递归查询。
- 如果部门表很大,递归查询可能会导致性能问题,需要谨慎使用。
- 如果部门层级比较深,可能会超出MySQL的默认递归深度限制(默认为1000),需要在配置文件中修改max_recursive_iterations参数
原文地址: https://www.cveoy.top/t/topic/cQ3J 著作权归作者所有。请勿转载和采集!