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-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南
- 2024-12-07MySQL慢查询入门:快速掌握性能优化技巧
- 2024-12-07MySQL入门:新手必读的简单教程
- 2024-12-07MySQL入门:从零开始学习MySQL数据库
- 2024-12-07MySQL索引入门:新手快速掌握MySQL索引技巧
- 2024-12-06BinLog学习:MySQL数据库BinLog入门教程
- 2024-12-06Binlog学习:MySQL数据库的日志管理入门教程