繁体   English   中英

根据MYSQL中的另一个表值更新表列

[英]Update table column based on another table values in MYSQL

假设我有2张桌子:

第一个是产品

+------------------+-----------------+--------+
| Product Name     |      Type       | Price  |
+------------------+-----------------+--------+
| Carrots          | Vegetables      | 10     |
| Oranges          | Fruits          |     20 |
| Beer             | Drinks          |     50 |
| Milk             |  Dairy products |     30 |
| Burgers          |  meat           |     40 |
| Baguettes        | bread           |    10  |

第二个是Combos

+-----------+---------+-----------+-------------+
| Item1     |  Item2  |   Item3   |  TotalPrice |
+-----------+---------+-----------+-------------+
| Carrots   | Oranges | Beer      |             |
| Milk      | Burgers | Baguettes |             |
+-----------+---------+-----------+-------------+

我想根据产品总价更新每个组合的总价。

例如,Milk,Burgers和Baguettes组合的“ TotalPrice”列为80。

我该如何实现?

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

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

您的方法不太正确,关系未正确表示。 考虑两个实体ProductCombo ,以及它们之间的关系。 一个Combo肯定可以有很多Product ,对吗? 而且,一个Product可以属于许多Combo ,同意吗? 因此,这意味着两者之间的关系是many-to-many 要为这种关系建模,您需要第三个表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;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM