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;

相关推荐
想躺平的小羊几秒前
关于金额在数据库设置类型问题
数据库
神仙别闹1 分钟前
基于Python(Django)+MySQL 实现(Web)SQL智能检测系统的设计与实现
python·mysql·django
zhangchaoxies29 分钟前
MySQL触发器能否监控特定用户操作_结合审计功能实现分析
jvm·数据库·python
chushiyunen33 分钟前
faiss向量检索库(并非向量数据库)
数据库·faiss
qq_4135020243 分钟前
如何解决ORA-12518监听程序无法分配进程_内存耗尽与PGA溢出
jvm·数据库·python
Carsene1 小时前
第一章:为什么我们需要“类型安全”的 SQL DSL 框架?
java·sql
Mr_pyx1 小时前
Java 注解(Annotation)详解:从基础到 APT 实战
java·数据库·sqlserver
djjdjdjdjjdj1 小时前
如何用参数解构在函数入口处直接提取对象属性
jvm·数据库·python
forEverPlume2 小时前
mysql如何批量增加表的字段_脚本化DDL操作实践
jvm·数据库·python
精益数智工坊2 小时前
物料管理是什么?物料管理的具体工作有哪些?
大数据·前端·数据库·人工智能·精益工程