You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snowflake中如何在CTE内使用VALUES子句实现预期效果?

Snowflake中在CTE内使用VALUES子句的正确写法

Snowflake不支持像PostgreSQL那样直接在CTE的AS后使用VALUES子句,需要将VALUES包装在子查询中,以下两种写法都可以实现你要的效果:

写法一:在CTE定义时指定列名

WITH person (id, name) AS (
    SELECT * FROM (VALUES (1, 'Ted'), (2, 'Bill'))
)
SELECT * FROM person;

写法二:在子查询中指定列名

WITH person AS (
    SELECT * FROM (VALUES (1, 'Ted'), (2, 'Bill')) AS t(id, name)
)
SELECT * FROM person;

原因说明

Snowflake的CTE语法要求AS后面必须是完整的查询语句,而VALUES本身不属于完整查询,需要通过SELECT * FROM (...)将其转换为合法的数据源,这也是为什么单独执行SELECT * FROM (VALUES (...))可以正常运行的原因。

执行上述代码后,会得到与PostgreSQL中相同的输出:

id | name 
----+------
  1 | Ted
  2 | Bill

内容的提问来源于stack exchange,提问作者ori9mp

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 09:25:25