【DB_MySQL】MySQL关联更新匹配到多条数据的处理方案
MySQL关联更新匹配到多条数据的处理方案
一、结论(非常重要)
如果 1 条主表记录 匹配到 多条从表记录
MySQL 只会随机取其中 1 条记录的值来更新,其他会被忽略!
不会报错
不会合并数据
不会更新多次
只取第一条(不确定哪一条)
二、举个例子你立刻懂
表 A:用户表(1 条数据)
id | name
1 | 张三
表 B:订单表(3 条数据,都属于用户 1)
user_id | money
1 | 100
1 | 200
1 | 300
你执行关联更新
UPDATE 表A
JOIN 表B ON 表A.id = 表B.user_id
SET 表A.name = 表B.money;
结果:
表 A.name 只会变成 100、200、300 中的随机一个!
不是总和
不是报错
不是更新三次
三、更新成【多条记录的总和/最大值】
必须先分组聚合,再更新!
正确写法(先汇总,再更新)
UPDATE 表A
JOIN (
SELECT user_id, SUM(money) AS total
FROM 表B
GROUP 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 聚合,再更新
-
永远不要直接一对多关联更新,否则值不可控
五、一句话总结
一对多直接关联更新 = 随机取一条覆盖
想正确更新 = 必须先分组聚合

浙公网安备 33010602011771号