mysql循环中的一个循环来转置记录

pw136qt2  于 2021-08-13  发布在  Java
关注(0)|答案(1)|浏览(385)

我有一个带有字段(id,quantity,productid,customerid,deliverydate)的交货表。要求在每个产品上放置一个序列化标签,并维护标签、产品、客户和交货日期的日志。taglog表是自动递增的,id表示标签序列号

Delivery Table
id    quantity   productId     customerId     deliveryDate 
2085     4        10197          245          2020-06-05
2085     2        10433          245          2020-06-05

我想在delivery表(还没有标记的地方)中循环,并为每一行在taglog中为number in quantity字段创建一条单独的记录。例如,这两个交付记录应该在taglog表中创建6个记录。

tagLog
tagId      productId     customerId    deliveryDate
20890        10197           245        2020-06-05
20891        10197           245        2020-06-05
20892        10197           245        2020-06-05
20893        10197           245        2020-06-05
20894        10433           245        2020-06-05
20895        10433           245        2020-06-05

任何关于内环构造的建议都将不胜感激。

rsaldnfx

rsaldnfx1#

sql是一种基于集合的语言,在处理循环方面效率不高。
如果您运行的是mysql 8.0,那么可以通过递归查询来实现这一点(这仍然是一个迭代过程,但性能比存储过程中的循环要好):

with recursive cte as (
    select id, productId, customerId, deliveryDate, quantity 
    from delivery
    union all 
    select id, productId, customerId, deliveryDate, quantity - 1
    from cte
    where quantity > 0
)
select 
    row_number() over(order by id) tagId,
    productId,
    customerId,
    deliveryDate 
from cte

目前还不清楚要使用哪种方法来生成 tagId . 这将为您提供一个从 1 ,以及相同原件的记录 id 是连续的。

相关问题