Умножение количества и количества в разных таблицах в одной базе данных - PullRequest
3 голосов
/ 10 ноября 2019

это мои таблицы

ORDER_ITEMS

+----------+--------+-----------------+------------+
| order_id |item_id |    item_name    |  quantity  |
+----------+--------+-----------------+------------+
|     1    |   1    |      coffee     |     2      |
|     2    |   2    |      shake      |     2      |
|     2    |   3    |    icecream     |     3      |
+----------+--------+-----------------+------------+

PRODUCT_INGREDIENT:

+--------+-----------------+--------+
|item_id | ingredient_id   | amount |
+--------+-----------------+--------+
|   1    |      123        |  10    |
|   1    |      124        |  15    |
|   2    |      125        |  10    |
|   2    |      124        |  15    |
|   2    |      123        |  10    |
|   2    |      126        |  15    |
|   3    |      124        |  15    |
|   3    |      123        |  10    |
|   3    |      126        |  15    |
+--------+-----------------+--------+

Инвентаризация:

+--------+-----------------+--------+
|  id    | ingredient_id   | amount |
+--------+-----------------+--------+
|   1    |      123        |   80   |
|   2    |      124        |   70   |
|   3    |      125        |  100   |
|   4    |      126        |  100   |
+--------+-----------------+--------+

sql у меня естьработает, но мне нужно умножить столбец (количество) в таблице PRODUCT_INGREDIENT на столбец (количество) в таблице ORDER_ITEMS до

это выражение sql

UPDATE inventory i 
INNER  JOIN (
  SELECT p.ingredient_id, sum(p.amount) amount
    FROM product_ingredient p 
   INNER JOIN  order_items o on o.item_id = p.item_id
   WHERE o.order_id = 1
   GROUP BY p.ingredient_id
) p ON  i.ingredient_id = p.ingredient_id 
SET i.amount = i.amount - p.amount 

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

+--------+-----------------+--------+
|  id    | ingredient_id   | amount |
+--------+-----------------+--------+
|   1    |      123        |  100   |
|   2    |      124        |  100   |
|   3    |      125        |  100   |
|   4    |      126        |  100   |
+--------+-----------------+--------+

Ответы [ 2 ]

1 голос
/ 10 ноября 2019

При просмотре образца данных вам нужно добавить результат подзапроса

UPDATE inventory i 
INNER  JOIN (
  select p.ingredient_id, sum(p.amount*o.quantity) amount
  from product_ingredient p 
  INNER JOIN  order_items o on o.item_id = p.item_id
  WHERE o.order_id = 1
  GROUP BY p.ingredient_id
) p ON  i.ingredient_id = p.ingredient_id 
SET i.amount = i.amount + p.amount 
1 голос
/ 10 ноября 2019

Вы можете использовать такой оператор UPDATE:

UPDATE inventory i 
 INNER JOIN (
  SELECT p.ingredient_id, sum(p.amount*o.quantity) amount
  FROM product_ingredient p 
  INNER JOIN  order_items o on o.item_id = p.item_id
  WHERE o.order_id = 1
  GROUP BY p.ingredient_id
) p ON  i.ingredient_id = p.ingredient_id 
SET i.amount = i.amount + p.amount 

Демо

Только ingredient_id 123 и 124 соответствуют длявесь запрос. Итак, только они обновлены.

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