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

MySQL:基于Quantity列值生成行并插入ProductionActual表

MySQL实现按Quantity生成多行数据插入表的方案

针对你的需求,这里提供两种适配MySQL的实现方案,分别对应不同版本的MySQL:

方案一:MySQL 8.0+ 使用递归CTE

MySQL 8.0及以上版本支持递归公共表表达式(CTE),可以直接生成序列来匹配Quantity的行数:

WITH RECURSIVE num_series AS (
    SELECT 1 AS series
    UNION ALL
    SELECT series + 1 FROM num_series WHERE series < (SELECT MAX(Quantity) FROM Producttemp)
)
INSERT INTO ProductionActual (Requisition, Quantity, Series)
SELECT 
    pt.Requisition, 
    pt.Quantity, 
    ns.series
FROM Producttemp pt
JOIN num_series ns ON ns.series <= pt.Quantity;

说明

  1. 递归CTE num_series 生成从1到Producttemp表中最大Quantity值的连续序列
  2. 通过JOIN关联Producttemp和序列表,只保留每个Requisition对应的序列值不超过其Quantity的行
  3. 直接将符合条件的数据插入到ProductionActual表

方案二:MySQL 5.x 版本(不支持递归CTE)

对于不支持递归CTE的旧版本MySQL,可以通过创建数字辅助表来实现:

步骤1:创建并填充数字辅助表

-- 创建数字辅助表,可复用
CREATE TABLE IF NOT EXISTS number_table (num INT PRIMARY KEY);

-- 插入1到1000的连续数字(可根据实际最大Quantity调整范围)
INSERT INTO number_table (num)
SELECT a.N + b.N * 10 + c.N * 100 + 1 AS num
FROM 
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) a,
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) b,
    (SELECT 0 AS N UNION ALL SELECT 1 UNION ALL SELECT 2 UNION ALL SELECT 3 UNION ALL SELECT 4 UNION ALL SELECT 5 UNION ALL SELECT 6 UNION ALL SELECT 7 UNION ALL SELECT 8 UNION ALL SELECT 9) c
WHERE a.N + b.N * 10 + c.N * 100 + 1 <= 1000;

步骤2:执行插入操作

INSERT INTO ProductionActual (Requisition, Quantity, Series)
SELECT 
    pt.Requisition, 
    pt.Quantity, 
    nt.num AS Series
FROM Producttemp pt
JOIN number_table nt ON nt.num <= pt.Quantity;

说明

  1. 数字辅助表存储足够多的连续整数,确保覆盖Producttemp中所有可能的Quantity值
  2. 通过JOIN关联Producttemp和数字表,筛选出每个Requisition对应的有效序列行,插入目标表

测试示例

如果需要验证效果,可以先创建测试表并插入示例数据:

-- 创建Producttemp表
CREATE TABLE Producttemp (
    Requisition VARCHAR(20),
    Quantity INT
);
INSERT INTO Producttemp VALUES ('GJ002_01_AD',5),('GJ002_02_AD',3);

-- 创建ProductionActual表
CREATE TABLE ProductionActual (
    Requisition VARCHAR(20),
    Quantity INT,
    Series INT
);

执行对应版本的插入语句后,查询ProductionActual表即可得到你期望的结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 17:15:37