mysql 通过sql计算部门路径的方法

-- 创建部门表

CREATE TABLE department (

dept_id INT PRIMARY KEY AUTO_INCREMENT,

parent_id INT,

name VARCHAR(50)

);

-- 添加测试数据

INSERT INTO department (name, parent_id) VALUES ('公司', NULL), ('技术部', 1), ('市场部', 1), ('研发组', 2), ('产品组', 2), ('运营组', 3), ('客服组', 3);

-- 定义递归函数

DELIMITER $$

CREATE FUNCTION getDepartmentPaths(deptId INT) RETURNS TEXT BEGIN

DECLARE resultText TEXT DEFAULT ''; -- 保存结果文本

SELECT GROUP_CONCAT(name SEPARATOR ' > ') INTO resultText FROM department WHERE find_in_set(parent_id, @path := CONCAT(@path, ',', dept_id)) IS NOT NULL;

IF CHARACTER_LENGTH(resultText) = 0 THEN

SET resultText = '-';

END IF;

RETURN resultText;

END$$

DELIMITER ;

-- 调用递归函数获取部门路径

SELECT dept_id, getDepartmentPaths(dept_id) AS path FROM department ORDER BY dept_id ASC;

相关推荐
z44247532611 分钟前
MySQL如何配置自动清理失效事务锁_结合定时任务清理
jvm·数据库·python
2301_8009769318 分钟前
数据库的基本操作
数据库·sql·oracle
cyber_两只龙宝18 分钟前
【Oracle】Oracle之使用DML语言管理表
linux·运维·服务器·数据库·云原生·oracle
电商API_1800790524726 分钟前
获取淘宝商品原价、券后价的区别在哪里?难度以及解决办法
数据库·性能优化·数据挖掘·数据分析·网络爬虫
qq_3729069327 分钟前
怎么通过宝塔面板对网站数据库进行深度碎片整理_使用Optimize命令优化表空间资源占用
jvm·数据库·python
窥视未来31 分钟前
MySQL 性能调优完全指南:从硬件到 SQL,一篇吃透
java·数据库
難釋懷32 分钟前
Redis数据结构-Dict
数据结构·数据库·redis
阿丰资源1 小时前
基于SpringBoot+MySQL的校园管理系统设计与实现(源码+文档+数据库,直接运行)
数据库·spring boot·mysql
弹简特1 小时前
【Redis】01-认识Redis+分布式系统知识背景介绍
数据库·redis·缓存