码迷,mamicode.com
首页 > 数据库 > 详细

MySql 递归查询

时间:2019-01-25 15:17:45      阅读:290      评论:0      收藏:0      [点我收藏+]

标签:--   child   mysq   查询   递归函数   exist   weight   into   实现   

MySql 递归查询

一、递归语句

-- 向下递归函数
SELECT GROUP_CONCAT(‘‘‘‘, pk_dept , ‘‘‘‘)  FROM rzzxdb.bi_dept WHERE FIND_IN_SET(fr_pk_dept,1070)>0;

结果:

技术分享图片

二、自定义递归函数

利用find_in_set()函数和group_concat()函数实现递归查询:

1,向下递归:

DROP FUNCTION IF EXISTS queryChildrenAreaInfo;
CREATE FUNCTION queryChildrenAreaInfo(areaId INT) -- 或者 areaId char
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp=$;
SET sTempChd = CAST(areaId AS CHAR);

WHILE sTempChd IS NOT NULL DO
SET sTemp= CONCAT(sTemp,,,sTempChd);
SELECT GROUP_CONCAT(id) INTO sTempChd FROM t_areainfo WHERE FIND_IN_SET(parentId,sTempChd)>0;
END WHILE;
RETURN sTemp;
END;

调用方式:

SELECT * FROM t_areainfo WHERE FIND_IN_SET(id,queryChildrenAreaInfo(4));

2,向上递归:

DROP FUNCTION IF EXISTS queryChildrenAreaInfo1;
CREATE FUNCTION queryChildrenAreaInfo1(areaId INT)
RETURNS VARCHAR(4000)
BEGIN
DECLARE sTemp VARCHAR(4000);
DECLARE sTempChd VARCHAR(4000);

SET sTemp=$;
SET sTempChd = CAST(areaId AS CHAR);
SET sTemp = CONCAT(sTemp,,,sTempChd);

SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
WHILE sTempChd <> 0 DO
SET sTemp = CONCAT(sTemp,,,sTempChd);
SELECT parentId INTO sTempChd FROM t_areainfo WHERE id = sTempChd;
END WHILE;
RETURN sTemp;
END;

调用方式:

SELECT * from t_areainfo where FIND_IN_SET(id,queryChildrenAreaInfo1(7));

 

MySql 递归查询

标签:--   child   mysq   查询   递归函数   exist   weight   into   实现   

原文地址:https://www.cnblogs.com/lizm166/p/10319277.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!