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:使用多个条件进行排名(一个条件是检查行是不是在同一个标签中)