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;

相关推荐
2301_7893804916 小时前
vsc中使用DBHub-MCP连接云Mysql到vsc-copilot
数据库·mysql
杨DaB16 小时前
【MySQL】02 数据库的基本操作
数据库·mysql·oracle
jnrjian16 小时前
Oracle hints 空格要求
sql·oracle
m***667317 小时前
SQL 实战—递归 SQL:层级结构查询与处理树形数据
java·数据库·sql
昙鱼17 小时前
Markdown文件导入Milvus向量数据库完整指南
数据库·ai·milvus
A__tao17 小时前
gotool.top 的 SQL 转 Markdown
数据库·sql
Austindatabases17 小时前
基于SQLite如何设计应用程序,拆散,散,还的散!
数据库·sqlite
矶鹬笛手18 小时前
(2.1) 信息技术及其发展
sql·计算机网络·c#
马克学长19 小时前
SSM面向乡村振兴服务的产教融合服务平台521gh(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面
数据库·乡村振兴·ssm 框架·服务平台
u***276119 小时前
C#数据库操作系列---SqlSugar完结篇
网络·数据库·c#