首页 > 解决方案 > mysql - 如何根据 3 个表对特定数据进行 SUM()

问题描述

产品具有不同的选项(属性),具体取决于您获得产品组合的可能选项。我想为我的产品编辑每个组合的价格。对于每个组合,价格应该等于该组合所有属性的总和。注意:同一属性可能对价格产生两种不同的影响,具体取决于产品。

我有3个表如下:

ps_product_attribute_shop - 价格影响取决于组合 (id_product_attribute) 的属性列表。

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

ps_attribute_impact - 每个属性及其所属产品及其价格影响的列表

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

ps_product_attribute_combination - 属性和产品组合的匹配(这里的组合 27934 有两个属性 => 46, 56)

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

我正在尝试更新ps_product_attribute_shop每个产品组合的所有价格。

我尝试在 phMyAdmin 中使用以下查询:

UPDATE ps_product_attribute_shop
SET ps_product_attribute_shop.price = 
(
   SELECT SUM(ps_attribute_impact.price) 
   FROM ps_attribute_impact 
   WHERE ps_product_attribute_shop.id_product = ps_attribute_impact.id_product 
         AND ps_attribute_impact.id_attribute IN 
         (
            SELECT ps_product_attribute_combination.id_attribute 
            FROM ps_product_attribute_combination 
            WHERE ps_product_attribute_combination.id_product_attribute = 
                  ps_product_attribute_shop.id_product_attribute
         )
);

但我在 phpMyAdmin 中收到以下错误:

#1064 - 您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 1 行的 ')' 附近使用正确的语法

标签: mysqlphpmyadmin

解决方案


事实上,以下查询有效。

UPDATE ps_product_attribute_shop
SET ps_product_attribute_shop.price = 
(
   SELECT SUM(ps_attribute_impact.price) 
   FROM ps_attribute_impact 
   WHERE ps_product_attribute_shop.id_product = ps_attribute_impact.id_product 
         AND ps_attribute_impact.id_attribute IN 
         (
            SELECT ps_product_attribute_combination.id_attribute 
            FROM ps_product_attribute_combination 
            WHERE ps_product_attribute_combination.id_product_attribute = 
                  ps_product_attribute_shop.id_product_attribute
         )
);

问题是当我单击 phpMyAdmin 中的“模拟请求”按钮时。但是当我点击“执行”按钮时,一切正常。

感谢大家的帮助。


推荐阅读