MySQL 更新查询where条件只更新一条记录
MySQL update query with where condition only updating one record
我有两个 table:
- 产品详细信息 - 用于存储产品信息。
- 产品列表 - 对于可能由不同用户出售的多份副本。
我正在使用此 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
我有两个 table:
- 产品详细信息 - 用于存储产品信息。
- 产品列表 - 对于可能由不同用户出售的多份副本。
我正在使用此 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