SQL - это язык на основе набора , который неэффективен при обработке циклов.
Если вы используете MySQL 8.0, вы можете сделать это с помощью рекурсивного запроса (это все еще итеративный процесс, но с большей производительностью, чем al oop в хранимой процедуре):
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
являются последовательными.