Mysql函数查询所有子节点

本文介绍了一个MySQL存储过程函数FN_GetOrgChild,该函数通过递归方式获取组织结构中指定部门的所有子部门ID。适用于企业级应用中组织结构的快速查询。

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


CREATE DEFINER=`root`@`%` FUNCTION `FN_GetOrgChild`(rootId INT) RETURNS longtext CHARSET utf8
    COMMENT '作者:coder7911 作用:获取部门节点子节点'
BEGIN 
		DECLARE sTemp LONGTEXT; 
		DECLARE sTempChd LONGTEXT; 
		SET sTemp = '$'; 
		SET sTempChd =cast(rootId as CHAR); 
		WHILE sTempChd is not null DO 
		SET sTemp = concat(sTemp,',',sTempChd); 
		SELECT group_concat(ORG_ID) INTO sTempChd FROM d_organization where  FIND_IN_SET(PARENT_ID,sTempChd)>0; 
		END WHILE; 
		RETURN sTemp; 
END


MySQL中可以使用递归CTE(通用表达式)来创建查询子节点函数。以下是一个简单的例子: 假设我们有一个表格tree,其中包含两个列:id和parent_id。id表示节点的唯一标识符,parent_id表示该节点的父节点的标识符。我们想要编写一个函数,该函数接受一个节点的id作为输入,并返回该节点的所有子节点的id。 首先,我们可以创建一个递归CTE来查找给定节点的所有子节点: WITH RECURSIVE sub_tree AS ( SELECT id, parent_id FROM tree WHERE id = <input_id> UNION ALL SELECT t.id, t.parent_id FROM tree t JOIN sub_tree st ON t.parent_id = st.id ) SELECT id FROM sub_tree; 在上面的查询中,我们首先选择给定的节点,然后使用UNION ALL将其与所有直接子节点组合在一起。然后,在每个递归步骤中,我们选择与先前选择的子节点相关联的所有节点,并将它们添加到结果集中。这样,我们可以使用CTE来获取给定节点的所有子节点。 接下来,我们可以将上述查询封装在一个函数中: DELIMITER // CREATE FUNCTION get_sub_tree(input_id INT) RETURNS VARCHAR(255) BEGIN DECLARE result VARCHAR(255) DEFAULT ''; WITH RECURSIVE sub_tree AS ( SELECT id, parent_id FROM tree WHERE id = input_id UNION ALL SELECT t.id, t.parent_id FROM tree t JOIN sub_tree st ON t.parent_id = st.id ) SELECT GROUP_CONCAT(id) INTO result FROM sub_tree; RETURN result; END // DELIMITER ; 在上面的函数中,我们首先定义一个名为result的变量,该变量将用于存储结果。然后,我们使用上面的递归CTE查询获取给定节点的所有子节点,并使用GROUP_CONCAT将所有子节点的id连接成一个字符串。最后,我们返回该字符串作为函数的结果。 现在,我们可以使用以下方式调用该函数来获取节点1的所有子节点: SELECT get_sub_tree(1); 该函数将返回一个逗号分隔的子节点id列表,如下所示: 2,3,4,5,6 这些就是MySQL创建查询子节点函数的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值