mysql update select 导致数据更新错误

最近一个电商系统的会员账号数据需要汇总清算并迁移到另外一个表,涉及表字段账户数据更新,但是更新的数据是由select计算而来的。如果使用php写代码,把每一步查询结果存到内存数组,再循环更新数据库表里,也是一种方案,就是比较花时间。 为了偷懒,直接使用sql语句编程,新建了一张表,存储结算结果集,再把这张表按照关联规则更新到会员账户表。

UPDATE member m set m.balance = m.balance +
(select jiangli from account where user_id = m.id);

这里有两张表,member(id, balance) 和 account (user_id, jiangli) 想实现的结果是把account里有记录的账户 到member表 对应的用户 余额字段(balance)加上一个 奖励(jiangli).

member表大概15000条记录,需要发放奖励的用户 500条记录。

使用上面一段代码更新,导致数据更新错误,实际更新的用户大概在4000多条左右,明显结果不对。

经过再三复盘,修改sql代码如下。

UPDATE member m inner join account n on m.id = n.user_id
set m.balance = m.balance + n.jiangli;

本质原因是update关联表的原因。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数字化转型高高老师

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值