首页/数据/SQL 速查/跨表更新:UPDATE ... FROM 与 UPDATE JOIN
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条函数速查60 条
变更与事务52 条
性能与执行计划72 条

跨表更新:UPDATE ... FROM 与 UPDATE JOIN

用另一张表的数据更新本表:PostgreSQL 用 UPDATE ... FROM,MySQL 用 UPDATE ... JOIN;注意一对多匹配的不确定性。

SQL 速查数据更新于 2026-10-12

PostgreSQL

PostgreSQL
UPDATE orders o
SET status = p.status
FROM payment p
WHERE p.order_id = o.id
  AND p.status = 'success';

MySQL

MySQL
UPDATE orders o
JOIN payment p ON p.order_id = o.id AND p.status = 'success'
SET o.status = p.status;
PostgreSQLUPDATE 目标表 + FROM 源表 + WHERE 关联;别把目标表再写进 FROM
MySQLJOIN 语法支持 INNER/LEFT 等;多表更新不能用 ORDER BY/LIMIT
风险源表对同一目标行有多条匹配时,取哪条由执行计划决定

易错点

  • 源表一对多时 UPDATE ... FROM 结果不确定(哪条先到用哪条),先聚合源表成一行再更新
  • MySQL 多表 UPDATE 里对同一行的多次匹配也是未定义顺序,业务上应保证源表键唯一

数据来源与参考

  • PostgreSQL Documentation · UPDATE
  • MySQL 8.0 Reference Manual · UPDATE
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌