如何使用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
相关产品推荐
相关产品推荐

