基于MYSQL中的另一个表值更新表列

基于MYSQL中的另一个表值更新表列,mysql,sum,Mysql,Sum,假设我有两张桌子: 第一个是产品: +------------------+-----------------+--------+ | Product Name | Type | Price | +------------------+-----------------+--------+ | Carrots | Vegetables | 10 | | Oranges | Fruits |

假设我有两张桌子:

第一个是产品:

+------------------+-----------------+--------+
| Product Name     |      Type       | Price  |
+------------------+-----------------+--------+
| Carrots          | Vegetables      | 10     |
| Oranges          | Fruits          |     20 |
| Beer             | Drinks          |     50 |
| Milk             |  Dairy products |     30 |
| Burgers          |  meat           |     40 |
| Baguettes        | bread           |    10  |
+-----------+---------+-----------+-------------+
| Item1     |  Item2  |   Item3   |  TotalPrice |
+-----------+---------+-----------+-------------+
| Carrots   | Oranges | Beer      |             |
| Milk      | Burgers | Baguettes |             |
+-----------+---------+-----------+-------------+
第二个是组合:

+------------------+-----------------+--------+
| Product Name     |      Type       | Price  |
+------------------+-----------------+--------+
| Carrots          | Vegetables      | 10     |
| Oranges          | Fruits          |     20 |
| Beer             | Drinks          |     50 |
| Milk             |  Dairy products |     30 |
| Burgers          |  meat           |     40 |
| Baguettes        | bread           |    10  |
+-----------+---------+-----------+-------------+
| Item1     |  Item2  |   Item3   |  TotalPrice |
+-----------+---------+-----------+-------------+
| Carrots   | Oranges | Beer      |             |
| Milk      | Burgers | Baguettes |             |
+-----------+---------+-----------+-------------+
我想根据每个组合产品的总价格更新其总价格

例如,牛奶、汉堡和法式面包组合的“总价格”栏将为80


如何实现这一点?

您可以使用子查询根据组合项计算总和:

UPDATE combos SET total_price = (SELECT SUM(price) FROM products
    WHERE product_name IN (item1, item2, item3));

您的方法不太正确,关系没有正确表示。考虑两个实体
产品
组合
,以及它们之间的关系。一个
组合
当然可以有很多
产品
,对吗?但是,一个
产品
可以属于许多
组合
,同意吗?这意味着两者之间的关系是多对多。要对这种关系进行建模,您需要第三个表,
Combo\u Product
,只有当
Product
属于
Combo
时,该表才会包含一条记录

使用此模型,您可以简单地使用brige表将两者连接起来,并执行聚合以获得任意和

查询将按以下行进行:

select c.id_combo, sum(p.price)
from combo c
join combo_product cp on c.id_combo = cp.id_combo
join product p on cp.id_product = p.id_product
group by c.id_combo;