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;

相关推荐
Y***89081 分钟前
【JAVA进阶篇教学】第十二篇:Java中ReentrantReadWriteLock锁讲解
java·数据库·python
周杰伦fans23 分钟前
在C#中,`StringContent` 是 `HttpContent` 的一个派生类
开发语言·数据库·c#
P***843927 分钟前
SQL多行数据合并到一行中的一个字段
数据库·sql
j***294832 分钟前
【MySQL】数据库和表的操作
数据库·mysql·oracle
梅梅绵绵冰39 分钟前
ssm整合框架
数据库·mybatis
z***02601 小时前
springboot整合modbus实现通讯
数据库·spring boot·后端
CNRio1 小时前
Oracle 9i-11g全平台安装介质及补丁集下载指南(2025年最新有效链接)
数据库·oracle
L***86531 小时前
SQL 注入详解:原理、危害与防范措施
数据库·sql·oracle
弥生赞歌1 小时前
MySQL 数据库集群高可用与可视化监控平台搭建实验报告
数据库·mysql
e***71671 小时前
mysql用户名怎么看
数据库·mysql