【问题标题】:cte in postgresql vs ms sql [duplicate]postgresql与ms sql中的cte [重复]
【发布时间】:2025-12-06 05:20:05
【问题描述】:

我的观察是我们不能在 postgresql 的嵌套 cte 案例中将 cte 与递归 cte 混合,但看起来我们可以在 MS SQL 中做到这一点。我对吗?例如,对于 postgresql,在这种情况下我会出错

with cte1 ( ... ),
recursive cte2 (...)
select * from cte1 join cte2;

但看起来它适用于 ms sql。这是正确的吗?

【问题讨论】:

  • 只需将recursive 关键字放在第一个 CTE 之前。它适用于整个with 子句。

标签: sql sql-server postgresql tsql common-table-expression


【解决方案1】:

两个数据库都支持混合使用非递归和递归公用表表达式。

在 Postgres 中,语法是:

with recursive
    cte1 as (...), -- non-recursive CTE
    cte2 as (...)  -- recursive CTE
select * from cte1 join cte2

SQL Server 无法识别 recursive 关键字,因此:

with 
    cte1 as (...), -- non-recursive CTE
    cte2 as (...)  -- recursive CTE
select * from cte1 join cte2

【讨论】: