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

MonetDB中使用WITH子句的UPDATE语句运行报错如何解决?

你的SQL语句确实存在语法错误。报错的核心原因是:你定义的CTE t 没有和UPDATE的目标表显式关联,导致WHERE子句中无法识别来自t的字段。

MonetDB的UPDATE语法要求,如果需要借助其他表(包括CTE)的数据做更新条件或赋值来源,需要通过FROM子句显式声明要关联的表,修正后的参考写法如下:

WITH t AS (
    SELECT DISTINCT cod_atc_nl_1 , desc_atc_nl_1 
    FROM uruguay.staging_rm_dims 
    WHERE desc_atc_nl_1 IS NOT NULL 
    ORDER BY 1
)
UPDATE uruguay.staging_rm_dims s
SET
    desc_atc_nl_1 = t.desc_atc_nl_1,
    desc_atc_nl_2 = t.desc_atc_nl_1,
    desc_atc_nl_3 = t.desc_atc_nl_1,
    desc_atc_nl_4 = t.desc_atc_nl_1
FROM t
WHERE
    s.desc_atc_nl_1 IS NULL
    AND s.desc_atc_nl_2 IS NULL
    AND s.desc_atc_nl_3 IS NULL
    AND s.desc_atc_nl_4 IS NULL
    AND s.cod_atc_nl_4 IS NOT NULL
    AND s.cod_atc_nl_1 = t.cod_atc_nl_1;

主要修改说明

  • 给更新目标表uruguay.staging_rm_dims增加别名s,明确字段归属避免歧义
  • 新增FROM t子句,显式声明要关联的CTE表,让WHERE子句可以正常识别t的字段
  • 所有属于目标表的条件字段都加上别名s,逻辑更清晰

注意事项

请提前确认CTE t中同一个cod_atc_nl_1仅对应唯一的desc_atc_nl_1,如果存在一对多的映射关系,更新结果可能不符合预期。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:45:03