如何将表值构造器定义的表通过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
相关产品推荐
相关产品推荐

