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;

相关推荐
冰暮流星2 分钟前
mysql之索引创建,查看,删除
数据库·mysql
溪语流沙10 分钟前
【Web全栈进阶】Alembic数据库迁移:改表结构不再删库
前端·数据库·python·elasticsearch·postgresql
杨云龙UP22 分钟前
Oracle 19c 单机到单机 Active Data Guard 搭建与巡检操作手册
数据库·oracle·adg·操作指南·data guard·dg搭建
念越27 分钟前
初中语数英答题与竞赛平台
java·数据库·spring boot
落日归屿1 小时前
AI 商品图做完后,为什么还要管图层?
数据库
拾贰_C1 小时前
【English | conversation 】call | 抖音AI短句情景:打电话---come over
数据库·redis·缓存
2601_962885721 小时前
AlphaFeed 支持哪些 K 线周期?period参数怎么传?
前端·数据库·python
麦壳饼2 小时前
架构深度解析:SonnetDB 的写入与查询路径
数据库·sonnetdb
福兮说2 小时前
IP 地址转整数的七个坑:192.168.1.1 算出负数、127.1 也是合法地址、存进 INT 直接溢出
javascript·网络·网络协议·tcp/ip·mysql·golang
gudufy2 小时前
ASP.NET Core 多租户如何动态创建数据库?数据库初始化怎么做?
数据库·blazor·admin