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;

相关推荐
2401_83595681几秒前
Go语言怎么防SQL注入_Go语言SQL注入防护教程【深入】
jvm·数据库·python
杨云龙UP1 分钟前
CentOS7.9及以上环境部署TDengine TSDB-OSS实战指南:安装、配置、建库、建超级表与验证_20250418
大数据·linux·运维·数据库·centos·时序数据库·tdengine
m0_514520573 分钟前
宝塔面板怎样实现数据库的多地异地自动备份_结合阿里云OSS与定时任务插件
jvm·数据库·python
北漂Zachary3 分钟前
四大编程语言终极对决
java·linux·数据库
qq_334563554 分钟前
golang如何优化磁盘IO性能_golang磁盘IO性能优化思路
jvm·数据库·python
Aloudata7 分钟前
基于 NoETL 语义编织技术构建 AI-Ready 数据底座
数据库·人工智能·数据分析·skill·语义编织
主角1 711 分钟前
NoSQL之Redia配置与优化
数据库·nosql
2402_8548083712 分钟前
MySQL高负载下查询中断怎么解决_增加系统内存与调整参数
jvm·数据库·python
2401_8877245014 分钟前
Go语言GORM怎么做分页_Go语言GORM分页查询教程【实用】
jvm·数据库·python
星星也在雾里14 分钟前
MySQL 数据迁移到 PostgreSQL 实战教程
数据库·mysql·postgresql