You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

单条UPDATE查询关联两表更新all_stores的qty字段失败问题咨询

问题原因
  • 你编写的SQL直接关联两张表时,i_v表中同一个child_id存在多条对应记录,all_stores的单条记录会匹配到i_v的多条记录。MySQL的关联更新逻辑中,同一条目标表记录只会被匹配到的第一条关联记录更新,不会自动累加所有关联记录的qty值,最终得到的更新结果和预期差异极大,看起来就像没有完成更新。
  • 原SQL没有处理i_v中不存在对应child_id的场景,这部分all_stores的记录不会触发更新逻辑,不过这不是核心问题。
修正方案

你需要先对i_v表按child_id分组,统计每个关联ID需要扣减的总库存数,再和all_stores关联更新,修正后的SQL如下:

UPDATE all_stores a
LEFT JOIN (
    SELECT child_id, SUM(qty) AS total_qty
    FROM i_v
    GROUP BY child_id
) i ON a.id = i.child_id
SET a.qty = a.qty - IFNULL(i.total_qty, 0);

如果你还需要同步更新dec_qty字段记录总扣减数量,可以调整SET部分:

SET a.qty = a.qty - IFNULL(i.total_qty, 0),
    a.dec_qty = IFNULL(i.total_qty, 0)

说明:这里用LEFT JOIN是为了覆盖all_stores里的所有记录,没有对应扣减需求的记录库存会保持不变,IFNULL是为了避免没有匹配到扣减记录时出现NULL值导致更新出错。

内容的提问来源于stack exchange,提问作者himtom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.20 19:54:03