Snowflake递归CTE报错:锚点与递归项类型不匹配如何解决?
解决Snowflake递归CTE的类型不匹配错误
错误原因分析
你的递归CTE触发编译错误的核心原因是递归分支的语法错误导致列类型与锚点分支不一致:
- 锚点分支
select 1 as number中,number被定义为整数(INT)类型; - 递归分支里的
Select number= number+1写法不符合Snowflake语法,会被解析为布尔表达式(判断number是否等于number+1),返回BOOLEAN类型,与锚点分支的INT类型冲突,因此报错。
修正后的SQL语句
将递归分支的错误写法替换为正确的数值计算表达式即可:
With N ( select 1 as number Union all Select number + 1 from N where number <=35 ) Select * from N
也可以显式指定列别名(效果一致):
With N ( select 1 as number Union all Select number + 1 as number from N where number <=35 ) Select * from N
修正说明
把错误的number= number+1改为number + 1(或带别名),确保递归分支返回的number列是整数类型,与锚点分支的类型保持统一,递归CTE即可正常执行。
内容的提问来源于stack exchange,提问作者Ramya
相关产品推荐
相关产品推荐

