小猿圈之MySql递归查询

不管学习什么语言,python、java、php等等如果你以后的方向是web,那么你都离不开数据库,mysql数据库又是开源的,所以是最受欢迎的数据库,也是企业用的最多的数据库,小猿圈老师详解mysql的递归查询,不懂的同学可以看过来了。

一、递归语句

-- 向下递归函数

SELECT GROUP_CONCAT('''', pk_dept , '''')  FROM rzzxdb.bi_dept WHERE FIND_IN_SET(fr_pk_dept,'1070')>0;

设置某个部门下的所有子部门为无效:

update bi_dept set zt ='0' WHERE FIND_IN_SET(fr_pk_dept,'部门ID')>0;

二、自定义递归函数

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

1、向下递归:

调用方式:

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

实例:

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;

2、向上递归

调用方式:

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

实例:

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;

mysql递归方式分为向上递归和向下递归,小猿圈老师详解的mysql递归就到这了,想必大家看后有所了解了,学明白的同学感觉收获满满,有问题的朋友可以去小猿圈看看老师的视频详解,也许看后你会更加深入的了解。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值