如何用单条SQL为Odoo所有合作伙伴统一添加税项?
批量为所有合作伙伴添加税项的SQL修改方案
你可以通过INSERT ... SELECT语法实现批量插入,替代原来的单条VALUES语句,无需循环即可为所有合作伙伴添加税项,以下是两种适配场景的方案:
场景1:res_partner_perception表的id是自增主键(推荐)
如果id字段设置了自增(比如MySQL的AUTO_INCREMENT、PostgreSQL的SERIAL/IDENTITY),可以直接省略id字段,让数据库自动生成唯一ID,避免手动计算的冲突问题:
INSERT INTO res_partner_perception (perception_id, create_date, percent, excluded, partner_id) SELECT 114, -- 固定的税项ID NOW(), -- 当前时间作为创建日期 3, -- 税率 0, -- 是否排除(0为不排除) id -- 从合作伙伴表中取所有ID FROM res_partner; -- 假设存储合作伙伴的表名为res_partner
场景2:id字段非自增,需手动生成
如果必须手动指定id,可以通过窗口函数生成递增的ID值,确保每个记录的ID唯一:
INSERT INTO res_partner_perception (id, perception_id, create_date, percent, excluded, partner_id) SELECT -- 基于当前表最大ID,加上行号生成唯一ID (SELECT COALESCE(MAX(id), 0) FROM res_partner_perception) + ROW_NUMBER() OVER (ORDER BY rp.id), 114, NOW(), 3, 0, rp.id FROM res_partner rp;
额外建议:避免重复插入
如果部分合作伙伴可能已经存在该税项记录(perception_id=114),可以添加过滤条件,只插入未存在的记录:
INSERT INTO res_partner_perception (perception_id, create_date, percent, excluded, partner_id) SELECT 114, NOW(), 3, 0, rp.id FROM res_partner rp WHERE NOT EXISTS ( -- 检查当前合作伙伴是否已有该税项 SELECT 1 FROM res_partner_perception rpp WHERE rpp.perception_id = 114 AND rpp.partner_id = rp.id );
内容的提问来源于stack exchange,提问作者HANDBALL PLACE
相关产品推荐
相关产品推荐

