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;

相关推荐
数据库小组1 天前
2026 年,MySQL 到 SelectDB 同步为何更关注实时、可观测与可校验?
数据库·mysql·数据库管理工具·数据同步·ninedata·selectdb·迁移工具
华科易迅1 天前
MybatisPlus增删改查操作
android·java·数据库
Kethy__1 天前
计算机中级-数据库系统工程师-计算机体系结构与存储系统
大数据·数据库·数据库系统工程师·计算机中级
SHoM SSER1 天前
MySQL 数据库连接池爆满问题排查与解决
android·数据库·mysql
熬夜的咕噜猫1 天前
MySQL备份与恢复
数据库·oracle
jnrjian1 天前
recover database using backup controlfile until cancel 假recover,真一致
数据库·oracle
qq_283720051 天前
MySQL技巧(十四): 连接数过多 (Too many connections):原因 + 排查 + 终极解决方案
mysql·连接池·性能·异常
lifewange1 天前
java连接Mysql数据库
java·数据库·mysql
大妮哟1 天前
postgresql数据库日志量异常原因排查
数据库·postgresql·oracle
还是做不到嘛\.1 天前
Dvwa靶场-SQL Injection (Blind)-基于sqlmap
数据库·sql·web安全