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;

相关推荐
better_liang12 分钟前
每日Java面试场景题知识点之-MySQL索引
java·数据库·mysql·性能优化·索引
AgCl2313 分钟前
MYSQL-4-DQL数据查询语言-3/14-15
数据库·mysql
别抢我的锅包肉19 分钟前
【MySQL】第五节 - 事务实战详解:从基础到并发控制(附 Navicat 可运行实验脚本)
数据库·mysql
殷紫川33 分钟前
避坑必看!MySQL 三大日志(redo/undo/binlog)底层原理全拆解,事务一致性再也不懵
mysql
AgCl231 小时前
MYSQL-5-DCL数据查询语言-3/16
数据库·mysql
IvorySQL1 小时前
PostgreSQL 技术日报 (4月7日)|内核开发新动态,多项功能优化落地
数据库·postgresql·开源
IvorySQL1 小时前
PostgreSQL 技术日报 (4月6日)|内核补丁与性能优化速递
数据库·postgresql·开源
IvorySQL2 小时前
PostgreSQL 技术日报 (4月5日)|六大核心补丁进展,生产环境必看
数据库·postgresql·开源
想唱rap2 小时前
线程的同步与互斥
linux·运维·服务器·数据库·mysql
IvorySQL2 小时前
走进高校,走近开源|IvorySQL 社区即将亮相应急管理大学开源学术报告会
数据库·postgresql·开源