MySQL процедура обновления таблицы на основе значения из другой таблицы - PullRequest
1 голос
/ 14 апреля 2020

Я пишу процедуру, которая с учетом номера заказа обновляет количество на складе. В настоящее время я получаю номер продукта id_p и количество qt_p.
. У меня есть таблица materials.

id | qt
-------
 1 | 12
 2 |  4

и таблица materials_x_product, в которой указывается для каждого продукта, какие материалы и количество, необходимое для изготовления куска

id | qt_per_product | id_material | id_product
----------------------------------------------
 1 |       5        |     1       |    1
 2 |       2        |     2       |    1

Моя процедура должна обновить таблицу материалов, уменьшив количество материала, используемого для изготовления продукта id_p на qt_per_product * qt_p, и потерпит неудачу и откатится, если количество какого-либо материалов идет ниже 0. Например, с учетом приведенных выше таблиц и id_p = 1, qt_p = 2 ожидаемый результат для таблицы материалов составляет

id | qt      id | qt 
-------      ------- 
 1 | 12  =>   1 |  2 
 2 |  4       2 |  0 

Я попытался выполнить несколько ответов на topi c , но проблема, похоже, заключается в том, что мне нужно обновить строки таблицы материалов на основе объединенной таблицы материала и материала_x_product.

1 Ответ

0 голосов
/ 14 апреля 2020

Вы можете выполнить обновление следующим образом:

update materials m join
       materials_x_product mp
       on mp.id_material = m.id
    set qt = m.qt - (mp.qt_per_product * qt_p)
    where mp.product_id = ?;

Я бы рекомендовал добавить триггер или ограничение check, чтобы значения не становились отрицательными.

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