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

VFP跨表更新:如何通过销售表扣减库存表数据(字段名不同)

关联字段名不同时更新库存表的解决方案
  • 完全不需要重命名销售表的id_reg字段,直接通过关联条件就能完成库存扣减,强烈不推荐用Do … While循环,单条SQL更新语句效率高得多。

直接用UPDATE JOIN的方式就能实现,以MySQL为例:

UPDATE inventory i
JOIN (
    -- 先统计每个商品的总销量
    SELECT id_reg, SUM(sales_quantity) AS total_sold
    FROM sales
    GROUP BY id_reg
) s ON i.id = s.id_reg  -- 这里直接用不同字段做关联条件
SET i.stock_quantity = i.stock_quantity - s.total_sold;

如果一定要用循环(比如特定业务场景需求),也不需要重名字段,核心还是通过id和id_reg的匹配来更新,比如在MySQL存储过程里的写法:

DECLARE done INT DEFAULT FALSE;
DECLARE reg_id INT;
DECLARE sold_qty INT;
-- 定义游标读取每个商品的总销量
DECLARE cur CURSOR FOR SELECT id_reg, SUM(sales_quantity) FROM sales GROUP BY id_reg;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;

OPEN cur;

read_loop: LOOP
    FETCH cur INTO reg_id, sold_qty;
    IF done THEN
        LEAVE read_loop;
    END IF;
    -- 直接用id匹配reg_id更新库存
    UPDATE inventory SET stock_quantity = stock_quantity - sold_qty WHERE id = reg_id;
END LOOP;

CLOSE cur;

注意:循环更新的性能远不如批量更新,数据量大时容易引发锁表、超时问题,能不用就不用。

内容的提问来源于stack exchange,提问作者Job Silva Ramirez

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.14 19:22:06