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;

相关推荐
slandarer10 分钟前
MATLAB | R2026b 更新了哪些有趣的新东西
开发语言·数据库·matlab
其实防守也摸鱼13 分钟前
SQL注入实验笔记
android·运维·数据库·安全·oracle·自动化
做运维的阿瑞39 分钟前
一张用户表串懂 MySQL 的库、表、列、行、主键
数据库·sql·mysql·oracle
细嗅蔷薇@41 分钟前
MySQL中数据类型介绍
数据库·mysql
JosieBook1 小时前
【数据库】MySQL 实战精通系列 · 第3篇:SQL 核心与复杂查询实战
数据库·sql·mysql
一只旭宝1 小时前
【C++复习】四种类型转换 + 常见设计模式 + Redis/MySQL(后端面试复习完整版)
c++·redis·笔记·mysql·设计模式
Dragon_qu·x1 小时前
MongoDB 高可用集群部署
运维·数据库·mongodb·k8s·helm
爱签AI电子合同1 小时前
电子合同大批量怎么测?并发与批量处理维度专项测评
服务器·数据库·人工智能·企业微信·电子签名
JosieBook1 小时前
【数据库】MySQL 实战精通系列 · 第4篇:索引原理与执行计划实战
android·数据库·mysql