mysql递归查询父部门下的所有层级子部门的存储过程

本文介绍了一种使用存储过程和递归查询方法,通过调用getChildList函数获取指定ID下所有子级ID的列表。此方法适用于具有层级结构的数据表,如组织机构信息表,其中包含PARENTID和SECONDPID两个父级ID字段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构

35ef96ad3afe6f24519bc5a29daefb96992.jpg

其中有PARENTID和SECONDPID两个父级ID

存储过程

CREATE FUNCTION `getChildList`(rootId VARCHAR)
RETURNS varchar(4000) 

BEGIN
	  #声明两个局部变量
    DECLARE sTemp VARCHAR(4000);
    DECLARE sTempChd VARCHAR(4000);
		#初始化局部变量
    SET sTemp = '';
		#调用cast函数将int转换为char
    SET sTempChd =rootId;
    #递归拼接
    WHILE sTempChd is not null DO
				#存储每次递归结果
        SET sTemp = concat(sTemp,',',sTempChd);
				#将参数作为pid,然后查询其子id,然后将子id作为pid,
        #查询以子id为pid的子id,依次循环下去,直到所有节点都为叶子节点
        SELECT group_concat(GUID) INTO sTempChd FROM  sys_organization_info where FIND_IN_SET(PARENTID,sTempChd)>0 or FIND_IN_SET(SECONDPID,sTempChd)>0;
    END WHILE;
    RETURN sTemp; 
END

执行完上边的语句,就会在函数里面多了一个函数

d33cced69fc5797228bc3a4c552f89175c8.jpg

然后  以后只需要执行

select * from sys_organization_info where FIND_IN_SET(GUID,getChildList("2018082015251077310005")) and guid<>'2018082015251077310005';

查询结果

d01f69df52c2346fe82369a1dcc573d8287.jpg

转载于:https://my.oschina.net/u/3286465/blog/1982439

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值