可以使用递归查询实现,以下是一个示例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参数
部门表中有部门id和pid 如何根据所在部门id去查询所有上级部门 Mysql 50版本用sql实现

原文地址: https://www.cveoy.top/t/topic/cQ3J 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录