EXECUTE будет обновляться только один раз - PullRequest
0 голосов
/ 21 января 2020

У меня есть следующий код (написано в 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

любая помощь будет оценена, спасибо

ОБНОВЛЕНИЕ: Я отредактировал пример, чтобы поток был более понятным

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...