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
相关产品推荐
相关产品推荐

