MySQL循环中的一个用于转置记录的循环

问题描述 投票:0回答:1

我有一个包含字段(id,数量,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

我想遍历交货表(尚未标记),并为每一行在tagLog中为数量字段中的编号创建一个单独的记录。例如,这两个交付记录应在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

有关内部循环构造的任何建议,将不胜感激。

mysql sql loops transpose recursive-query
1个回答
0
投票

SQL是一种基于[[set-based]]的语言,在处理循环方面效率不高。如果您正在运行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的记录是连续的。
© www.soinside.com 2019 - 2024. All rights reserved.