MySQL更新查询,where条件仅更新一条记录


MySQL update query with where condition only updating one record

我有两个表:

  1. 产品详细信息-用于存储产品信息
  2. 产品列表-针对不同用户可能销售的多个副本

我使用这个选择查询来收集listings table = (SELECT product_name, MIN(price) FROM product_listings GROUP BY product_name)上同名产品的最低价格$product&$min_price是我分别用于这两个字段的变量。

这样做效果很好,是使用相同product_name的所有产品中价格最低的。

product_name | Lowest price
Title        | £0.69
Title        | £7.98

现在,我想用这些数据更新产品详细信息表(特别是"lowest_price"列),以便每个动态渲染的产品都显示可用的最便宜副本的价格。

到目前为止,我只用这个update query = ("UPDATE product_details SET lowest_price='$min_price' WHERE product_name='$product'"); 更新了一条记录

是否可以使用这样的更新查询来更新所有记录?为什么它只更新一条记录?

假设您的product_listings表中有一个product_id,它与product_details表中的id字段相关,则可以执行以下操作:

update products p 
    inner join (
        select product_id, min(price) min_price 
            from product_listing 
            group by product_id
        ) pl 
    on p.id = pl.product_id 
    SET p.min_price = pl.min_price

如果不是这样,而且你只有产品名称可以加入(这不是一个好主意),那就是:

update products p 
    inner join (
        select product_name, min(price) min_price 
            from product_listing 
            group by product_name
        ) pl 
    on p.product_name = pl.product_name 
    SET p.min_price = pl.min_price

小提琴示例:http://sqlfiddle.com/#!9/9b928/1