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;

相关推荐
Frank_refuel11 小时前
【MYSQL进阶】-> 索引理解
数据库
lv__pf11 小时前
MVCC机制【TL mysql7】
数据库
cqsztech11 小时前
Oracle ai database 26ai rac 通过gold image 更新季度补
数据库·人工智能·oracle
认真就输DBA11 小时前
一个DBA,把用了16年的两款软件换了
数据库·ai·dba·tabby·笔记软件·obsidian
穆利堂-movno111 小时前
郑州新网软件科技有限公司AI 数据源错误纠正反馈
大数据·数据库·人工智能
程序员夏洛12 小时前
Redis 数据过期后的删除策略是什么?
数据库·redis·缓存
鱼鳞_12 小时前
热门八股-Redis
数据库·redis·缓存
这个DBA有点耶12 小时前
SQL:2023新特性详解:JSON_TABLE、GREATEST/LEAST、QUALIFY 到底怎么用?
数据库·sql·mysql
AOI小白新手上路12 小时前
江科协15-2 直流电机实验调试总结
数据库·mongodb
小王C语言12 小时前
MySQL 用户管理:创建用户、给用户授权
数据库·mysql