MySQL递归查询WITH RECURSIVE
2022/1/4 19:03:55
本文主要是介绍MySQL递归查询WITH RECURSIVE,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
WITH RECURSIVE cte_name AS ( initial_query -- anchor member UNION ALL recursive_query -- recursive member that references to the CTE name ) SELECT * FROM cte_name;//原文出自【易百教程】,商业转载请联系作者获得授权,非商业请保留原文链接:https://www.yiibai.com/mysql/recursive-cte.html
递归CTE由三个主要部分组成:
- 形成CTE结构的基本结果集的初始查询(initial_query),初始查询部分被称为锚成员。
- 递归查询部分是引用CTE名称的查询,因此称为递归成员。递归成员由一个UNION ALL或
UNION DISTINCT
运算符与锚成员相连。 - 终止条件是当递归成员没有返回任何行时,确保递归停止。
递归CTE的执行顺序如下:
- 首先,将成员分为两个:锚点和递归成员。
- 接下来,执行锚成员形成基本结果集(
R0
),并使用该基本结果集进行下一次迭代。 - 然后,将
Ri
结果集作为输入执行递归成员,并将Ri+1
作为输出。 - 之后,重复第三步,直到递归成员返回一个空结果集,换句话说,满足终止条件。
- 最后,使用
UNION ALL
运算符将结果集从R0
到Rn
组合
WITH recursive t1 ( org_id, prod_id, agent_id, up_agent_id, agent_level, order_by_num ) AS ( SELECT org_id, prod_id, agent_id, up_agent_id, agent_level, 1 AS order_by_num FROM agent_level WHERE 1 = 1 AND agent_id = #{agentId,jdbcType=VARCHAR} AND prod_id = #{prodId,jdbcType=VARCHAR} UNION ALL SELECT t2.org_id, t2.prod_id, t2.agent_id, t2.up_agent_id, t2.agent_level, order_by_num + 1 AS order_by_num FROM t1, agent_level AS t2 WHERE 1 = 1 AND t1.up_agent_id = t2.agent_id AND t1.prod_id = t2.prod_id ) SELECT t1.org_id, t1.prod_id, t1.agent_id, t1.up_agent_id, t1.agent_level, t1.order_by_num FROM t1 ORDER BY t1.order_by_num asc
这篇关于MySQL递归查询WITH RECURSIVE的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-05-29阿里 Canal 实时同步 MySQL 增量数据至 ClickHouse 数据库
- 2024-05-24在Linux下管理MySQL的大小写敏感性
- 2024-04-26MySQL查出时间比实际晚8小时的解决方案
- 2024-04-01JPA不识别MySQL的枚举类型
- 2024-03-30mysql数据库表卡死解决方法
- 2024-03-15MySQL多数据源笔记5-ShardingJDBC实战
- 2024-03-11natural join mysql
- 2024-03-11关于VS2017,VS2015 中利用 EF使用Mysql 不显示数据源问题解决方案
- 2024-02-26mysql 阿里云xb后缀备份文件恢复-icode9专业技术文章分享
- 2024-02-22docker mysql 5.7