MYSQL循环查询上级部门

创建表

sql 复制代码
CREATE TABLE `ceshi_dept` (
  `id` int unsigned NOT NULL AUTO_INCREMENT,
  `deptname` varchar(255) DEFAULT NULL,
  `deptnum` int DEFAULT NULL,
  `parentnum` int DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci

添加数据

sql 复制代码
INSERT INTO `ruoyi`.`ceshi_dept`(`id`, `deptname`, `deptnum`, `parentnum`) VALUES (1, '董事会', 1, NULL);
INSERT INTO `ruoyi`.`ceshi_dept`(`id`, `deptname`, `deptnum`, `parentnum`) VALUES (2, '生产研发部', 2, 1);
INSERT INTO `ruoyi`.`ceshi_dept`(`id`, `deptname`, `deptnum`, `parentnum`) VALUES (3, '软件部', 3, 2);
INSERT INTO `ruoyi`.`ceshi_dept`(`id`, `deptname`, `deptnum`, `parentnum`) VALUES (4, '测试部', 4, 3);

查询所有上级部门

sql 复制代码
WITH RECURSIVE dept_hierarchy AS (  
    SELECT id, deptname, deptnum, parentnum  
    FROM ceshi_dept  
    WHERE id = 4  -- 开始查询的起点  
    UNION ALL  
    SELECT c.id, c.deptname, c.deptnum, c.parentnum  
    FROM ceshi_dept c  
    JOIN dept_hierarchy dh ON c.id = dh.parentnum  
) 
SELECT * FROM dept_hierarchy where id!=4  ORDER BY id asc;  -- 排除起始点本身

查询所有下级部门

sql 复制代码
WITH RECURSIVE dept_hierarchy AS (  
    SELECT id, deptname, deptnum, parentnum  
    FROM ceshi_dept  
    WHERE parentnum = 1  -- 开始查询的上级部门ID  
    UNION ALL  
    SELECT c.id, c.deptname, c.deptnum, c.parentnum  
    FROM ceshi_dept c  
    JOIN dept_hierarchy dh ON c.parentnum = dh.id  
)  
SELECT * FROM dept_hierarchy ORDER BY id asc;
相关推荐
Databend10 分钟前
如何打造AI时代的数据基石 | Databend Meetup 上海站
数据库
uup21 分钟前
Java 中 ArrayList 线程安全问题
java
W***832022 分钟前
如何在 Ubuntu 22.04 上安装 MySQL
linux·mysql·ubuntu
uup22 分钟前
Java 中日期格式化的潜在问题
java
老华带你飞32 分钟前
海产品销售系统|海鲜商城购物|基于SprinBoot+vue的海鲜商城系统(源码+数据库+文档)
java·前端·数据库·vue.js·论文·毕设·海鲜商城购物系统
2401_8370885037 分钟前
Redisson的multilock原理
java·开发语言
今天你TLE了吗43 分钟前
Stream流学习总结
java·学习
合作小小程序员小小店1 小时前
桌面开发,在线%超市销售管理%系统,基于vs2022,c#,winform,sql server数据
开发语言·数据库·microsoft·c#
SelectDB1 小时前
字节跳动:Apache Doris + AI 一站式融合数据引擎的探索与实践
数据库·apache
7***q6081 小时前
在linux(Centos)中Mysql的端口修改保姆级教程
linux·mysql·centos