MySQL实现基于父产品的子产品customfields表数据增改需求
解决方案
可以利用MySQL的INSERT ... ON DUPLICATE KEY UPDATE语法结合表关联,实现子产品继承父产品佣金的插入/更新需求。
实现SQL
INSERT INTO customfields (product_id, commission) SELECT p_child.product_id, cf_parent.commission FROM products p_child JOIN products p_parent ON p_child.product_parent_id = p_parent.product_id JOIN customfields cf_parent ON p_parent.product_id = cf_parent.product_id WHERE p_child.seller_id > 1 AND p_child.product_parent_id != 0 ON DUPLICATE KEY UPDATE commission = VALUES(commission);
思路拆解
- 表关联逻辑:
- 用
p_child指代需要处理的子产品(即products表中seller_id>1且product_parent_id≠0的记录) - 通过
product_parent_id关联到对应的父产品p_parent,再通过父产品的product_id关联到customfields表中存储的父产品佣金数据cf_parent
- 用
- 插入/更新控制:
- 用
INSERT ... SELECT批量获取子产品ID和对应父产品的佣金值 - 依赖
ON DUPLICATE KEY UPDATE逻辑:如果customfields表中已存在该product_id的记录,则更新其commission为父产品的佣金;如果不存在,则插入新的记录
- 用
- 必要前提:需确保
customfields表的product_id字段是主键或唯一索引,这样ON DUPLICATE KEY才能触发更新操作
执行结果验证
执行上述SQL后,customfields表将得到预期结果:
product_id commission 1 A 2 A 3 B 4 A 5 B 6 B
内容的提问来源于stack exchange,提问作者user3358102
相关产品推荐
相关产品推荐

