У меня есть следующий код (написано в python для sqlite3):
UPDATE Products set quantity = CASE
WHEN (SELECT quantity FROM Activities WHERE product_id = id) < 0
THEN quantity = CASE
WHEN quantity + (SELECT quantity FROM Activities WHERE product_id = id) >= 0
THEN quantity + (SELECT quantity FROM Activities WHERE product_id = id)
ELSE
quantity
END
WHEN (SELECT quantity FROM Activities WHERE product_id = Products.id) > 0
THEN quantity + (SELECT quantity FROM Activities WHERE product_id = id)
ELSE
quantity
END
WHERE id IN (SELECT product_id FROM Activities)
Вот что я пытаюсь сделать здесь:
У меня есть база данных, которая хранит: -
- Таблица продуктов (которая содержит столбцы «id» и «количество») и
- Таблица действий (которая содержит столбцы «product_id» и «количество»).
Примите во внимание следующее: -
если Activity.quantity [i]> 0, то это партия продуктов, поступающая в хранилище, поэтому мы просто добавляем ее к количеству соответствующих продукт в таблице "Продукты".
, если Activity.quantity [i] <0, чем это означает продажу, поэтому сначала нам нужно проверить, достаточно ли количества соответствующего товара (количество не меньше количества продажи). </p>
Я пытаюсь обновить базу данных сразу, например, давайте предположим, что у нас есть продукт в таблице Products с id:1
и quantity:0
в строке i, что означает Products.quantity [i] = 0.
теперь предположим последовательность строк в таблице действий:
[(product_id:1, quantity -20),
(product_id:1, quantity 100),
(product-id:1 , quantity: -200),
(product-id:1 , quantity: -10)]
есть ожидаемый результат с точки зрения записи в Activity.quantity, которая соответствует product-id:1
после вычисления этой строки:
- первый шаг: Products.quantity [i] + Activities.quantity [0] = 0 - 100 <0, поэтому обновление пропускается </li>
- второй шаг: Products.quantity [i] + Activities.quantity [0] = 0 + 100> 0, поэтому произведите обновление: Products.quantity [i] = 100
- шаг третий: Products.quantity [i] + Activities.quantity [0] = 100 - 200 < 0, поэтому обновление пропускается
- шаг четвертый: Products.quantity [i] + Activities.quantity [0] = 90 - 10> 0, поэтому сделайте обновление: Products.quantity [i] = 90
любая помощь будет оценена, спасибо
ОБНОВЛЕНИЕ: Я отредактировал пример, чтобы поток был более понятным