MySQL 更新查询where条件只更新一条记录

MySQL update query with where condition only updating one record

我有两个 table:

  1. 产品详细信息 - 用于存储产品信息。
  2. 产品列表 - 对于可能由不同用户出售的多份副本。

我正在使用此 select 查询来收集 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

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

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

更新了一条记录

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

假设你的 product_listings table 中有一个 product_id,它与你的 product_details table 中的一个 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

示例fiddle:http://sqlfiddle.com/#!9/9b928/1