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

如何通过单个存储过程将结尾为'/1'的佣金记录关联至同编号的其他子佣金记录?

单个存储过程实现佣金批量关联方案

当然可以通过单个存储过程搞定这个批量关联需求!下面我结合你的场景,给出具体实现思路和可参考的代码示例:

核心实现思路

  1. 定位父记录:筛选出commission_number以/1结尾的佣金记录,提取它们的编号前缀(比如从222/2021/1中提取222/2021)。
  2. 匹配子记录:找到所有佣金编号前缀与父记录一致、且结尾数字大于1的佣金记录。
  3. 批量写入关联关系:将父记录与匹配到的子记录的关联关系批量插入到佣金关联表中,同时避免重复插入已存在的关联数据。

存储过程示例(以MySQL为例)

假设你的两张表结构如下:

  • 佣金表:commission(字段:id(主键)、commission_number(佣金编号)及其他业务字段)
  • 佣金关联关系表:commission_relation(字段:parent_id(父佣金ID)、child_id(子佣金ID)及其他字段)
DELIMITER //
CREATE PROCEDURE BatchLinkParentChildCommissions()
BEGIN
    -- 批量插入关联关系,跳过已存在的记录
    INSERT INTO commission_relation (parent_id, child_id)
    SELECT 
        p.id AS parent_id,
        c.id AS child_id
    FROM commission p
    -- 筛选父记录:佣金编号以/1结尾
    WHERE p.commission_number LIKE '%/1'
    -- 关联子记录:前缀相同,且结尾不是1
    JOIN commission c 
        ON SUBSTRING_INDEX(p.commission_number, '/', 2) = SUBSTRING_INDEX(c.commission_number, '/', 2)
        AND c.commission_number NOT LIKE '%/1'
    -- 跳过已存在的关联,避免重复插入
    WHERE NOT EXISTS (
        SELECT 1 
        FROM commission_relation cr 
        WHERE cr.parent_id = p.id AND cr.child_id = c.id
    );
    
    -- 可选:返回执行结果统计
    SELECT CONCAT('成功完成 ', ROW_COUNT(), ' 组佣金关联') AS execution_result;
END //
DELIMITER ;

关键逻辑说明

  • 前缀提取:用SUBSTRING_INDEX(commission_number, '/', 2)截取佣金编号的前两段,确保父、子记录属于同一编号组。
  • 子记录过滤:通过c.commission_number NOT LIKE '%/1'排除父记录本身,只匹配结尾数字大于1的子记录。
  • 去重处理:NOT EXISTS子句避免重复插入已存在的关联关系,防止主键冲突或冗余数据。

使用方式

直接调用存储过程即可完成批量关联:

CALL BatchLinkParentChildCommissions();

如果你使用SQL Server等其他数据库,只需调整字符串处理函数(比如用LEFT+CHARINDEX替代SUBSTRING_INDEX)和存储过程语法,核心逻辑完全通用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 22:44:08