传统实践通常需要组合多个公共表表达式 (CTE) 来实现复杂的数据检索任务。然而,对于在单个 SQL 查询中组合多个 CTE 的可行性仍存在疑问。
事实上,在单个 SQL 查询中组合多个 CTE 是完全可行的。该语法要求仅使用一次WITH 关键字,位于查询的开头。即使在处理递归和非递归 CTE 的混合时,RECURSIVE 关键字仍然应该只在顶部包含一次。
例如:
WITH RECURSIVE cte1 AS (...) -- non-recursive , cte2 AS (SELECT ... UNION ALL SELECT ...) -- recursive , cte3 AS (...) SELECT ... FROM cte3 WHERE ...
值得注意的是,顺序当存在 RECURSIVE 关键字时,CTE 子句的数量变得无关紧要。根据 SQL 手册,它允许 CTE 查询引用其他 CTE,无论它们在 WITH 子句中的顺序如何。
此外,最终 SELECT 语句中未引用且不具有非递归 CTE任何附带效果都不会被执行。
以上是多个 CTE 可以合并在一个 SQL 查询中吗?的详细内容。更多信息请关注PHP中文网其他相关文章!