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 分钟前
ShardingSphere-JDBC 开发手册
java·数据库
lkbhua莱克瓦241 分钟前
基础-MySQL概述
java·开发语言·数据库·笔记·mysql
姓蔡小朋友4 分钟前
MySQL增删查改、多表查询
数据库·mysql
Knight_AL15 分钟前
Maven <dependencyManagement>:如何在多模块项目中集中管理依赖版本
java·数据库·maven
TAEHENGV16 分钟前
导入导出模块 Cordova 与 OpenHarmony 混合开发实战
android·javascript·数据库
不剪发的Tony老师33 分钟前
sqlectron:一款轻量级的SQL客户端
数据库·sql
酸菜牛肉汤面37 分钟前
7、索引设计的原则
数据库
薛不痒1 小时前
使用python操作MySQL
数据库·mysql
TG:@yunlaoda360 云老大1 小时前
华为云国际站代理商VIAS主要有什么作用呢?
数据库·人工智能·华为云
回忆是昨天里的海1 小时前
Spring boot接入视图时的问题
mysql·mybatisplus·视图