Presto SQL 是不是像 SQL Server 一样支持使用 CTE 进行递归查询?例如员工等级

Posted

技术标签:

【中文标题】Presto SQL 是不是像 SQL Server 一样支持使用 CTE 进行递归查询?例如员工等级【英文标题】:Does Presto SQL support recursive query using CTE just like SQL Server? e.g. employee hierarchy levelPresto SQL 是否像 SQL Server 一样支持使用 CTE 进行递归查询?例如员工等级 【发布时间】:2019-08-21 00:54:10 【问题描述】:

我想在 Presto 中使用 CTE 编写一个递归查询来查找 Employee Hierarchy。 Presto 支持递归查询吗? 当我把简单的递归写成

with cte as(select 1 n union all select cte.n+1 from cte where n<50) select * from cte

它给出的错误是

运行查询时出错:第 3:32 行:表 cte 不存在

【问题讨论】:

【参考方案1】:

当前答案

Trino 支持递归查询,但 Presto 的not PrestoDB 实现。

旧答案

Presto 语法支持WITH RECURSIVE name AS ...,但支持recursive WITH queries are not implemented。

这将作为功能请求进行跟踪: https://github.com/trinodb/trino/issues/1122

【讨论】:

【参考方案2】:
WITH RECURSIVE cte(n) AS (
    SELECT 1
    UNION ALL
    SELECT n + 1 FROM cte WHERE n < 50)
SELECT * from cte

错误:Recursion depth limit exceeded (10)

调整max_recursion_depth

【讨论】:

以上是关于Presto SQL 是不是像 SQL Server 一样支持使用 CTE 进行递归查询?例如员工等级的主要内容,如果未能解决你的问题,请参考以下文章

Presto系列 | 五Tuning Presto SQL Query

SQL/Presto:使用多个条件进行排名(一个条件是检查行是不是在同一个标​​签中)

Presto SQL - 将日期字符串转换为日期格式

Presto SQL - 两个完全不同的表连接平行而不是垂直

Presto sql获取上个月的数据直到当天的数据?

Presto