-- 删除函数
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
)