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;

相关推荐
a9511416428 小时前
golang如何设计分布式ID生成系统_golang分布式ID生成系统设计指南
jvm·数据库·python
2301_782659188 小时前
Go 中高效过滤结构体切片:基于用户名映射去重的最优实践
jvm·数据库·python
2301_813599558 小时前
Golang怎么处理HTTP响应_Golang HTTP响应处理教程【对比】
jvm·数据库·python
m0_748839498 小时前
C#怎么将集合分块处理_C#如何使用Chunk方法【实战】
jvm·数据库·python
21439658 小时前
Bootstrap制作后台管理系统布局 Bootstrap如何搭建Dashboard框架
jvm·数据库·python
吕源林8 小时前
Python爬虫怎么获取动态AJAX数据_从浏览器网络控制台分析接口
jvm·数据库·python
m0_640309308 小时前
C#怎么实现单例模式 C#如何正确实现线程安全的Singleton单例设计模式【设计模式】
jvm·数据库·python
Flying pigs~~8 小时前
企业级模块化RAG项目(mysql➕redis➕milvus➕模型微调➕bm25➕fastapi➕ollama➕Prompt➕多策略选择)
人工智能·redis·mysql·docker·prompt·milvus·rag
试试勇气8 小时前
MySQL--表的操作
数据库·mysql
志栋智能8 小时前
超自动化运维如何重塑IT组织的核心竞争力?
运维·服务器·网络·数据库·人工智能·自动化