mysql - 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 行的 ')' 附近使用正确的语法
解决方案
事实上,以下查询有效。
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 中的“模拟请求”按钮时。但是当我点击“执行”按钮时,一切正常。
感谢大家的帮助。
推荐阅读
- java - Elasticsearch SELECT * FROM IP="1.1.1.1" AND NAME="ETH1/10"
- c++ - if 和 else if 语句的错误
- java - 当我单击注册时,数据会存储在数据库中,但随后会出现“javax.persistence.TransactionRequiredException:没有正在进行的事务”
- python - 有没有办法用大写和小写分隔字符串?
- c# - 有没有办法通过自动调用基本方法来扩展方法而不用 C# 编写调用?
- php - PHP - 检查字符串是否包含“youtube”然后显示
- microservices - 如何为链式微服务存储状态客户端
- android - Android 11 的 READ_EXTERNAL_STORAGE 权限
- c# - uniqueidentifier 与 newid() 不兼容
- javascript - 为 html 文件中的输出编码 HTML 文件