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;

相关推荐
Treh UNFO2 分钟前
nginx的重定向
大数据·数据库·nginx
jvvz afqh9 分钟前
mysql用户名怎么看
数据库·mysql
eDEs OLDE13 分钟前
CC++链接数据库(MySQL)超级详细指南
c语言·数据库·c++
EXnf1SbYK14 分钟前
Redis分布式锁进阶第八篇:锁超时乱序深度踩坑 + 看门狗失效真实溯源 + 业务长耗时标准化兜底方案
数据库·redis·分布式
EXnf1SbYK23 分钟前
Redis分布式锁进阶第十一篇
数据库·redis·分布式
xiaohe0729 分钟前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#
冬奇Lab33 分钟前
RAG 系列(六):向量数据库——存储与检索的基础设施
数据库·人工智能·llm
vooy pktc33 分钟前
macOS安装Redis
数据库·redis·macos
辞旧 lekkk36 分钟前
【Qt】初识(上)
开发语言·数据库·qt·学习·萌新
编程之升级打怪1 小时前
MySQL数据库SQL语句简单用法
sql·mysql