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;

相关推荐
4***14901 小时前
MySQL调试技巧与工具
数据库·mysql
Arva .1 小时前
如何监控并优化慢 SQL?
数据库·sql
n***54381 小时前
【MySQL】MySQL内置函数--日期函数字符串函数数学函数其他相关函数
android·mysql·adb
linchare3 小时前
linux debian上只装mysql的客户端步骤
linux·mysql·debian
w***4244 小时前
【MySQL】复合查询
数据库·mysql
q***01774 小时前
【MySQL】表的基本操作
数据库·mysql·oracle
budingxiaomoli5 小时前
存储过程和触发器
数据库
q***12535 小时前
PostgreSQL_安装部署
数据库·postgresql
q***48255 小时前
mysql用户名怎么看
数据库·mysql
夏日玲子5 小时前
【Redis】Redis常用命令合集
数据库·redis·缓存