递归查询-mysql-oracle

it2023-06-27  76

递归查询

前言一、递归查询-mysql1.创建函数2.调用函数3.查询结果示例 二、递归查询-Oracle1.Oracle较简单语句如下

前言

本文介绍递归为通过父级查询子级

一、递归查询-mysql

1.创建函数

-- 删除函数 drop function if exists getLoopDepartId; -- 创建函数 -- DELIMITER create function getLoopDepartId(rootId varchar(20)) returns varchar (1000) BEGIN DECLARE pTemp VARCHAR(1000); DECLARE cTemp VARCHAR(1000); -- 节点ID(临时变量) SET pTemp = '$'; SET cTemp =cast(rootId as CHAR); -- 把rootId强制转换为字符。 WHILE cTemp is not null DO SET pTemp = concat(pTemp,',',cTemp); -- 把所有节点连接成字符串。 SELECT group_concat(departId) INTO cTemp FROM depart WHERE FIND_IN_SET(parentId,cTemp)>0; END WHILE; RETURN pTemp; END -- DELIMITER

2.调用函数

-- mysql递归查询 SELECT departId FROM depart T, (SELECT @DATAS := getLoopDepartId (1)) x WHERE find_in_set (departId, @DATAS); -- 实际应用通常套一层 select * from depart a where a.departId in ( SELECT departId FROM depart T, (SELECT @DATAS := getLoopDepartId (1)) x WHERE find_in_set (departId, @DATAS) )

3.查询结果示例

二、递归查询-Oracle

1.Oracle较简单语句如下

select * from depart a where a.departId in ( select b.departId from depart b start with b.departId = '1' connect by prior b.departId = b.parentId )
最新回复(0)