PostgreSQL 10多表关联SELECT转UPDATE操作报错问题求解
PostgreSQL 多表关联UPDATE错误原因及解决方案
存在的核心问题
- 目标表声明错误:你需要更新的是
table4的datum字段,UPDATE关键字后必须紧跟要修改的目标表,你三版语句都写了UPDATE table1,导致SET子句中t4.datum被识别为table1的t4字段,自然触发column "t4" of relation "table1" does not exist报错。 - 别名重复冲突:第一版语句中,你在
UPDATE后已经将table1声明为别名t1,又在FROM子句中重复给table1声明同名别名t1,触发表名重复的报错。 - 冗余的表声明:第二、三版语句不需要重复声明两次
table1,只需在FROM子句中关联一次即可,额外的重复声明只会增加逻辑混乱和关联错误概率。
正确写法
UPDATE table4 t4 SET datum = t1.datum FROM table1 t1 INNER JOIN table3 t3 ON t3.id = t1.id WHERE t4.id = t3.t4_id AND t3.id = 550 AND t4.scale IS NOT NULL AND t4.datum IS NULL;
语法说明
PostgreSQL的多表关联UPDATE遵循以下规则:
UPDATE后仅跟需要修改数据的目标表,可声明别名SET子句后的字段默认属于目标表,无需额外加别名(加目标表别名也可生效)- 关联的其他表统一放在
FROM子句中,关联条件和过滤条件都放在WHERE子句即可
内容的提问来源于stack exchange,提问作者user2210516
相关产品推荐
相关产品推荐

