我有一个包含字段(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
有关内部循环构造的任何建议,将不胜感激。
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
的记录是连续的。