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;

相关推荐
q***06475 分钟前
MySQL的UPDATE(更新数据)详解
数据库·mysql
8***B8 分钟前
MySQL性能
数据库·mysql
q***721934 分钟前
oracle使用PLSQL导出表数据
数据库·oracle
数据库生产实战35 分钟前
Oracle DG备库日志切换解析,Private strand flush not complete如何理解?(基础知识)
数据库·oracle
百***757438 分钟前
从 SQL 语句到数据库操作
数据库·sql·oracle
i***395838 分钟前
SQL 注入详解:原理、危害与防范措施
数据库·sql·oracle
m***56722 小时前
Win10下安装 Redis
数据库·redis·缓存
Warren982 小时前
Python自动化测试全栈面试
服务器·网络·数据库·mysql·ubuntu·面试·职场和发展
kka杰4 小时前
MYSQL 表的增删查改-更新/删除
数据库·mysql
深藏bIue4 小时前
linux服务器mysql目录下的binlog文件删除
linux·服务器·mysql