【问题标题】:Insert unique records into table based on calculation of other table column MYSQL根据其他表列MYSQL的计算将唯一记录插入表中
【发布时间】:2021-08-11 06:02:23
【问题描述】:

我有两个表(ProductionDetailsProduction),我需要根据 ProductionDetails 的计算值填充 Production。 ProductionDetails 有收集的桶数,Production 需要填充 BINS。例如,如果我有 100 个桶,我将它们除以 30,等于 3.33 个桶。现在我需要创建 3 个 BINS。

select Round( sum(ep.Buckets)/30),ep.lot,ep.crewid 
from On_EmpProdDetails ep
group by ep.buckets,  ep.lot,ep.crewid 

结果

Bins Lot Crew
3 556790186SOCC1 SOCC1

现在我想在生产表中插入 3 个唯一行
BinID 是自动递增的

BinID LOT
1 556790186SOCC1
2 556790186SOCC1
3 556790186SOCC1

【问题讨论】:

  • 以 CREATE TABLE + INSERT INTO 脚本的形式提供源,而不仅仅是中间查询的结果。提供此源数据的最终数据状态。指定精确的 MySQL 版本。

标签: mysql sql bulkinsert


【解决方案1】:

您可以使用递归 CTE 来生成行:

insert into production (lot)
    with recursive cte as (
          select Round( sum(ep.Buckets)/30) as num_bins, ep.lot, ep.crewid, 1 as bin 
          from On_EmpProdDetails ep
          group by ep.buckets,  ep.lot,ep.crewid 
          union all
          select num_bins, lot, crewid, bin + 1
          from cte
          where bin < num_bins
         )
    select lot
    from cte;

Here 是一个 dbfiddle。

【讨论】:

  • 感谢您的回复我试了一下,我收到错误插入 On_CrewProduction (Lot) 递归 cte as (select Round( sum(ep.Buckets)/30) as num_bins ,ep.crew,ep.Date, ep.lot, ep.crewid, 1 as bin from On_EmpProdDetails ep group by ep.buckets, ep.lot,ep.crewid union all select num_bins, lot, crowdid, bin + 1 from cte其中 bin
  • #1064 - 您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 2 行使用“递归 cte as (select Round(sum(ep.Buckets)/30) as num_bins,ep.c”附近的正确语法
  • 服务器:Localhost via UNIX socket 服务器类型:MySQL 服务器版本:5.7.23 - MySQL Community Server (GPL)
  • 我添加了一个 dbfiddle。但是,此代码需要 MySQL 8+,该版本已经发布了三年多。
猜你喜欢
  • 2023-04-06
  • 2014-08-09
  • 1970-01-01
  • 2018-12-05
  • 1970-01-01
  • 1970-01-01
  • 2019-04-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多