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

无需CTE:能否用CREATE TEMP TABLE AS替代手动建临时表存MERGE返回结果?

解答

当然可以,既不需要使用CTE,也能通过CREATE TEMP TABLE temp AS语句直接将MERGE操作的返回结果存入临时表,无需手动提前定义临时表结构。

调整后的代码

针对你提供的场景,改写后的写法如下(适配支持MERGE语法的主流数据库,如PostgreSQL 15+、Snowflake、Oracle等):

CREATE TEMP TABLE temp AS
MERGE INTO wines w
USING wines_updates u
ON u.winery_id = w.winery_id
WHEN MATCHED THEN
    UPDATE SET stock = u.stock
RETURNING merge_action() AS action, w.winery_id, w.brand;

关键说明

  • 这种写法无需提前手动创建临时表:数据库会自动根据RETURNING子句返回的字段类型、名称自动生成临时表的结构,省去了手动定义字段的步骤,减少结构不一致的风险。
  • 完全不需要CTE:MERGE操作本身的RETURNING结果可以直接作为CREATE TEMP TABLE ... AS的数据源,不需要额外的CTE包裹。
  • 效果与原代码一致:临时表temp会存储MERGE操作中所有匹配并被更新的记录,包含动作类型、酒庄ID和品牌信息。

测试验证

使用你提供的DDL初始化数据后,执行上述语句,查询temp表会得到以下结果:

actionwinery_idbrand
UPDATE1Cheapaux
UPDATE2Mediocret Sauvignon
UPDATE3Expensivau Blanc

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 05:33:11