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;
相关推荐
Moe4881 分钟前
Redis 缓存三大经典问题:穿透、击穿与雪崩
java·后端·面试
原来是猿2 分钟前
MySQL 在 Centos 7环境安装
数据库·mysql·centos
路小雨~7 分钟前
Milvus 向量数据库的官方文档笔记
数据库·学习·milvus
老衲提灯找美女8 分钟前
数据库约束
数据库
卷Java13 分钟前
Python字典:键值对、get()方法、defaultdict,附通讯录实战
开发语言·数据库·python
wanhengidc16 分钟前
跨境云手机适用于哪些场景
大数据·运维·服务器·数据库·科技·智能手机
赫瑞19 分钟前
Java中的最长公共子序列——LCS
java·开发语言
于先生吖22 分钟前
零基础开发国际版同城出行平台 JAVA 顺风车预约系统实战教学
java·开发语言
代码雕刻家22 分钟前
2.22.StringBuffer类的常见用法、
java·开发语言
yhole23 分钟前
Java进阶(ElasticSearch的安装与使用)
java·elasticsearch·jenkins