MySQL关联更新匹配到多条数据的处理方案 一、结论(非常重要) **如果 1 条主表记录 匹配到 多条从表记录** **MySQL 只会随机取其中 1 条记录的值来更新,其他会被忽略!** 不会报错 不会合并数据 不会更新多次 **只取第一条(不确定哪一条)** 二、举个例子你立刻懂 表 A:用户表(1 条数据) Text
表 B:订单表(3 条数据,都属于用户 1) Text 1 2 3 4 user\_id | money 1 | 100 1 | 200 1 | 300
你执行关联更新 1 2 3 UPDATE 表AJOIN 表B ON 表A.id = 表B.user\_idSET 表A.name = 表B.money;
结果: **表 A.name 只会变成 100、200、300 中的随机一个!** 不是总和 不是报错 不是更新三次 三、更新成【多条记录的总和/最大值】 必须先**分组聚合**,再更新!
正确写法(先汇总,再更新) 1 2 3 4 5 6 7 UPDATE 表AJOIN (SELECT user \_id, SUM (money) AS totalFROM 表BGROUP BY user \_id) 表B\_summary ON 表A.id = 表B\_summary.user\_id SET 表A.total\_money = 表B\_summary.total;
这样就能把**多条记录合并成一条**再更新,不会乱! 四、3 条安全规则(必须记住)
**UPDATE JOIN 时,确保关联后的结果是 1:1**
**一对多必须先 GROUP BY 聚合,再更新**
**永远不要直接一对多关联更新,否则值不可控**
五、一句话总结 **一对多直接关联更新 = 随机取一条覆盖** **想正确更新 = 必须先分组聚合**