Как обновить данные столбца, выполнив СУММУ значений из второй таблицы в зависимости от идентификатора из третьей? - PullRequest
0 голосов
/ 15 января 2019

Ниже приведены три таблицы (см. Также в приложении)

product_attribute_shop

+----------------------+--------+------------+
| id_product_attribute | price  | id_product |
+----------------------+--------+------------+
| 27934                | 50.000 | 9779       |
+----------------------+--------+------------+
| 27935                | 24.000 | 9780       |
+----------------------+--------+------------+

attribute_impact

+------------+--------------+--------+
| id_product | id_attribute | price  |
+------------+--------------+--------+
| 9779       | 45           | 00.000 |
+------------+--------------+--------+
| 9779       | 46           | 00.000 |
+------------+--------------+--------+
| 9779       | 47           | 00.000 |
+------------+--------------+--------+
| 9779       | 55           | 00.000 |
+------------+--------------+--------+
| 9779       | 56           | 46.000 |
+------------+--------------+--------+
| 9779       | 57           | 67.000 |
+------------+--------------+--------+

product_attribute_combination

+--------------+----------------------+
| id_attribute | id_product_attribute |
+--------------+----------------------+
| 46           | 27934                |
+--------------+----------------------+
| 56           | 27934                |
+--------------+----------------------+
| 46           | 27935                |
+--------------+----------------------+
| 57           | 27935                |
+--------------+----------------------+

Как мне обновить цену стола product_attribute_shop.
Для каждого id_product_attribute цена должна быть равна сумме атрибутов цены из таблицы attribute_impact, когда эти атрибуты имеют одинаковые id_product_attribute?

Edit:

Вот пример моих 3 таблиц:

product_attribute_combination

attribute_impact

product_attribute_shop

Я хочу обновить цену product_attribute_shop, где id_product_attribute = 27934. Для этого мне нужно получить совпадающие атрибуты в product_attribute_combination (ища тот же id_product_attribute) и затем сделать сумму цены этих атрибутов из таблицы attribute_impact.

В product_attribute_shop, где id_product_attribute = 27934, цена должна быть (46,0 + 0,00) = 46,0 вместо 50,00.

ОТВЕТ: Для редактирования цены всех комбинаций я использовал следующий запрос:

UPDATE product_attribute_shop
SET product_attribute_shop.price =
(
   SELECT SUM(attribute_impact.price)
   FROM attribute_impact
   WHERE product_attribute_shop.id_product = attribute_impact.id_product
         AND attribute_impact.id_attribute IN
         (
            SELECT product_attribute_combination.id_attribute
            FROM product_attribute_combination
            WHERE product_attribute_combination.id_product_attribute =
                  product_attribute_shop.id_product_attribute
         )
);

1 Ответ

0 голосов
/ 15 января 2019

Вы можете использовать вложенный запрос для достижения желаемого.

Вы можете использовать такой запрос, если хотите обновить отдельный продукт

update product_attribute_shop set price = (select sum(price) from attribute_impact where id_attribute in (select id_attribute from product_attribute_combination where id_product_attribute = 27934)) where id_product_attribute = 27934;

Еще примечание: в таблице attribute_impact id_product представляет собой дублирующую информацию, которую можно легко получить с помощью объединения из таблицы product_attribute_shop. Вы могли бы удалить, если не нужно для каких-либо других специальных целей.

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