PostgreSQL中如何通过JOIN或LEFT JOIN关联条件更新表数据
问题原因
原SQL未在UPDATE语句中显式声明关联表B,直接在WHERE条件中引用B表字段,数据库无法识别B表的数据源,因此无法正常执行。
通用兼容写法(支持绝大多数数据库)
使用EXISTS子查询实现关联校验,兼容性最好,不需要适配不同数据库的语法差异,如需调整b_field_1的匹配条件,修改对应B.b_field_1 = 1部分即可:
UPDATE A SET a_field_1 = 1, a_field_2 = 2 WHERE EXISTS ( SELECT 1 FROM B WHERE B.b_id = A.b_id AND B.b_field_1 = 1 );
主流数据库专属写法
如果使用的是特定数据库,可以采用对应专属语法,执行效率通常更高:
- MySQL 多表更新写法
UPDATE A INNER JOIN B ON A.b_id = B.b_id SET A.a_field_1 = 1, A.a_field_2 = 2 WHERE B.b_field_1 = 1;
- PostgreSQL 写法
UPDATE A SET a_field_1 = 1, a_field_2 = 2 FROM B WHERE A.b_id = B.b_id AND B.b_field_1 = 1;
- SQL Server 写法
UPDATE A SET A.a_field_1 = 1, A.a_field_2 = 2 FROM A INNER JOIN B ON A.b_id = B.b_id WHERE B.b_field_1 = 1;
内容的提问来源于stack exchange,提问作者sasori
相关产品推荐
相关产品推荐

