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;
相关推荐
chen.@-@5 分钟前
后端下载限速(redis记录实时并发,bucket4j动态限速)
数据库·redis·缓存
真实的菜6 分钟前
消息队列处理模式:流式与批处理的艺术
java
王小小鸭15 分钟前
【Oracle APEX开发小技巧12】
数据库·oracle
噼里啪啦啦.21 分钟前
Spring事务和事务传播机制
数据库·sql·spring
盖世英雄酱5813621 分钟前
Java 内存管理技巧(新手必看集合篇)
java
码农小灰24 分钟前
Java 8 Stream API 入门到实践详解
java·java案例
搬码红绿灯27 分钟前
MySQL主从复制深度解析:原理、架构与实战部署指南
数据库·mysql·架构
步、步、为营29 分钟前
.NET 事件模式举例介绍
java·开发语言·.net
呼拉拉呼拉29 分钟前
Redis高可用架构
数据库·redis·架构·高可用架构
却尘29 分钟前
当全世界都在用 Rust 重写一切时,Prisma 却选择了反方向
前端·数据库·orm