mysql-如何根据3个表执行特定数据的SUM()

时间:2019-01-15 14:50:48

标签: mysql phpmyadmin

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

我有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行的')'附近使用正确的语法

1 个答案:

答案 0 :(得分:0)

实际上,以下查询有效。

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中的“模拟请求”按钮时。但是,当我单击“执行”按钮时,一切正常。

谢谢大家的帮助。