首页 > 数据库 > mysql教程 > 多个 CTE(包括递归 CTE)能否组合在单个 SQL 查询中?

多个 CTE(包括递归 CTE)能否组合在单个 SQL 查询中?

Susan Sarandon
发布: 2025-01-05 05:19:39
原创
434 人浏览过

Can Multiple CTEs, Including Recursive Ones, Be Combined in a Single SQL Query?

在单个 SQL 查询中连接多个 CTE

在单个查询中组合多个公共表表达式 (CTE) 是否可行?目标是获得类似于以下内容的结果:

WITH cte1 AS (
...
),
WITH RECURSIVE cte2 AS (
...
),
WITH cte3 AS (
...
)
SELECT ... FROM cte3 WHERE ...
登录后复制

此查询包含一个递归 CTE 和两个非递归 CTE。

解决方案:

在单个 CTE 中连接多个 CTE查询:

  • 在开头使用WITH关键字once
  • 如果任何CTE是递归的,请在以下位置添加RECURSIVE关键字once开始,即使不是所有的 CTE 都是递归。

更新的查询:

WITH RECURSIVE
  cte1 AS (...)         -- can still be non-recursive
, cte2 AS (SELECT ...
           UNION ALL
           SELECT ...)  -- recursive term
, cte3 AS (...)
SELECT ... FROM cte3 WHERE ...
登录后复制

要点:

  • RECURSIVE 关键字允许 CTE自引用。
  • 使用 RECURSIVE,WITH 子句的顺序变得无关紧要。
  • 外部 SELECT 中未引用的 CTE 可能不会执行。

以上是多个 CTE(包括递归 CTE)能否组合在单个 SQL 查询中?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板