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

如何使用WITH查询中的数据生成VALUES自定义值表

你的写法出错的核心原因是:CTE(WITH子句定义的Test)无法直接在VALUES行构造器内部被引用,两者没有建立关联关系,数据库会识别不到Test.id这个字段。

根据你的场景,有两种常用的实现方案:

方案1:CROSS JOIN 关联 VALUES(推荐,语法更简洁)

如果你的Test CTE返回的是单行/多行id,都可以用交叉连接的方式把固定值列表和CTE的结果做笛卡尔积,刚好得到你要的结构:

WITH Test AS 
(
    SELECT table1.id FROM table1
)
SELECT 
    v.col1 AS "ColumnName1",
    t.id AS "ColumnName2"
FROM Test t
CROSS JOIN (VALUES ('Data1'), ('Data2')) v(col1);

方案2:UNION ALL 合并查询(兼容性最好)

几乎所有支持CTE的数据库都支持这种写法,不需要依赖VALUES的关联特性:

WITH Test AS 
(
    SELECT table1.id FROM table1
)
SELECT 'Data1' AS "ColumnName1", id AS "ColumnName2" FROM Test
UNION ALL
SELECT 'Data2' AS "ColumnName1", id AS "ColumnName2" FROM Test;

以上两种方案都可以实现你要的效果:第一列是固定的Data1/Data2,第二列是Test CTE返回的id值。如果Test返回多行id,两种方案都会自动给每个id生成对应的两行数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 21:06:02