我有这个使用表值构造函数的 SQL:
select * from (values ('a', 'b'), ('c', 'd')) v (e, f)
这可以用别名从表中选择数据v
。
但是,我想构建一个with
语句(CTE),以便将此值表与别名绑定,以便在CTE 后面的语句v
中使用它。select
像这样:
with v as
(
values ('a','b'), ('c','d') t (e, f)
)
select e from v where f = 'd'
这怎么可能呢?
只需将您的第一个查询自然地粘贴到括号内,如下所示:
您需要将整个语句放入 CTE 中:
将非递归 CTE 视为子查询的语法糖可能会有所帮助。因此,这与子查询语法的逻辑相同:
CTE 内的表值构造函数有点棘手,因为 SQL 语法不以您尝试的方式直接支持它。
最好的方法是在 WITH 语句内的 VALUES 子句中明确定义列名。
这是编写查询的正确方法:https://runsql.com/r/7f9d71d458eb7adf
请注意,必须在 SELECT * FROM 子查询内的 VALUES 子句后明确添加别名 t (e, f)。