递归查询
前言一、递归查询-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
)