【发布时间】:2020-02-15 23:01:13
【问题描述】:
递归 CTE 包括锚查询和递归查询。锚选择一行或多行开始,递归选择其余行。这些行与UNION ALL 子句组合在一起。
如果两个内部查询不返回相同的行,为什么需要将它们与 UNION ALL 子句组合,而不仅仅是 UNION ?据我所知,UNION ALL 的目的是包含重复的行。
这似乎是 Microsoft SQL 的要求,但不是 PostgreSQL。
或者图片还有更多内容?
感谢@MartinSmith 的评论,这似乎在Why does a Recursive CTE in Transact-SQL require a UNION ALL and not a UNION? 中得到了回答
我投票结束这个问题。
【问题讨论】:
-
对于 SQL Server,它可能只是不允许
UNION因为这不适用于 how they are implemented 它一次处理一行递归 CTE,然后一直向下直到该路径接受它。一次不是一个级别。您可以添加DISTINCT或类似的 on 以对整个结果或其他一些标准执行不同的操作,但语义不完全相同 -
仅供参考,您的链接问题中的以下评论很有帮助。它还指出
UNION在其他 SQL 中是允许的,但在 Microsoft 中是不允许的。 dba.stackexchange.com/questions/226946/… -
这个问题和这个问题有区别吗? stackoverflow.com/q/47998833/73226
-
@MartinSmith 感谢您采用更温和的方法来标记重复项。另一个问题确实回答了这个问题。我会关闭这个。
-
很酷,因为如果不立即关闭 Q 我想确保我没有遗漏任何东西,我就不能像骗子一样投票
标签: sql sql-server postgresql common-table-expression recursive-query