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;

相关推荐
emma羊羊3 分钟前
【SQL注入】延时盲注
数据库·sql·网络安全
一叶飘零_sweeeet30 分钟前
从 MySQL 到 TiDB:分布式数据库的无缝迁移与实战指南
数据库·mysql·tidb
axban1 小时前
QT M/V架构开发实战:QStandardItemModel介绍
开发语言·数据库·qt
没学上了1 小时前
数据库建立库-Qt
数据库
程序员小羊!1 小时前
大数据电商流量分析项目实战:Spark SQL 基础(四)
大数据·sql·spark
我是zxb1 小时前
EasyExcel:快速读写Excel的工具类
数据库·oracle·excel
代码不停2 小时前
MySQL联合查询
java·数据库·mysql
沐浴露z2 小时前
Redis内存回收:过期策略与淘汰策略
数据库·redis·缓存
宴之敖者、2 小时前
MySQL——数据库基础
数据库·mysql
张3蜂2 小时前
MongoDB BI Connector 详细介绍与使用指南(手动安装方式,CentOS 7 + MongoDB 5.0.5)
数据库·mongodb·centos