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

wkyowqbh  于 2021-06-21  发布在  Mysql
关注(0)|答案(2)|浏览(295)

假设我有两张table:
一是产品:

+------------------+-----------------+--------+
| 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 |             |
+-----------+---------+-----------+-------------+

我想更新每个组合的总价格的基础上,其产品的总价格。
例如,牛奶、汉堡包和法式面包组合的“totalprice”列将是80。
我怎样才能做到这一点?

hgqdbh6s

hgqdbh6s1#

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

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

jm2pwxwz2#

你的方法不太正确,这种关系没有得到正确的表述。想想两个实体 Product 以及 Combo ,以及它们之间的关系。1 Combo 当然可以有很多 Product ,对吧?而且,一个 Product 可以属于很多人 Combo ,同意吗?所以这意味着两者之间的关系是 many-to-many . 要建立这种关系,你需要第三张table, Combo_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;

相关问题