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

如何将表值构造器定义的表通过CTE(WITH语句)绑定别名使用?

正确的CTE写法示例

你原来的CTE语法有误,以下两种方式可以实现你的需求:

方式一:通用标准写法(兼容性好)

把表值构造器包装在子查询中,指定子查询的别名和列名,再放到CTE里:

with v as (
    select * from (values ('a','b'), ('c','d')) t (e, f)
)
select e from v where f = 'd'

方式二:简洁写法(主流数据库支持)

直接在CTE的别名后定义列名,然后跟上表值构造器,这种写法更简洁,PostgreSQL、SQL Server等都支持:

with v(e, f) as (
    values ('a','b'), ('c','d')
)
select e from v where f = 'd'

原写法的问题

你之前的代码里,values后直接跟t (e, f)不符合SQL语法规范,要么将values包裹进子查询并指定别名和列,要么在CTE的别名后提前定义列名,数据库才能正确识别表的列结构。

内容的提问来源于stack exchange,提问作者principal-ideal-domain

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 08:53:13