Mysql8 的 递归函数

本文介绍了MySQL8中如何使用Common Table Expressions(CTE)进行递归处理,通过示例展示了如何初始化cte,如何通过UNION ALL追加新数据,并解释了递归终止的条件。CTE使得复杂查询变得更加简洁易懂。
摘要由CSDN通过智能技术生成

MySQL 8 提供了相关递归处理的函数。

cte(Common Table Expressions):通用表表达式
示例:
WITH RECURSIVE cte AS (

    # 初始: 获取 菜单表中 pid 是 0 的数据作为 cte的初始数据
    SELECT * FROM sys_menu WHERE pid=0

    UNION ALL

    # 开始检查是否循环
    # 将 菜单表的pId与 cte表的 id进行关联合并到cte,如果cte数据未增加 退出
    SELECT sm.* FROM sys_menu sm, cte WHERE sm.pid = cte.id

) SELECT * FROM cte ORDER BY pid;
解释 :
  • 初始化:将 ()内部的 UNION ALL 上半部分 的sql语句结果 作为 cte
  • 待增数据:将 ()内部的 UNION ALL 下半部分 的sql语句结果作为 待增数据
  • 合并:UNION ALL (合并cte 与 待增数据) ③
  • 判断是否继续 ④
    • 存在 待增数据 继续 执行②
    • 不存在 待增数据 退出
模板:
	WITH RECURSIVE cte AS (
	
	    # 初始化 cte
	
	    UNION ALL
	    
	    # 将cte的数据作为基础表,与原始表关联 获取新数据 
	    # 通过UNION ALL  给 cte 追加新数据
	    # 判断   新数据的数量 是否 不为空/继续递归
	
	) SELECT * FROM cte
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值