Join MYSQL根据最低值选择更新不同列

Join MYSQL根据最低值选择更新不同列,join,distinct,Join,Distinct,我有以下示例表数据: id, price, product_id, default 905928, 2.92, 1523, 0 905929, 2.89, 1523, 0 905930, 3.92, 1524, 0 905931, 6.67, 1525, 0 905932, 11.92, 1526, 0 905933, 5.34, 1526, 0 905934, 3.92, 1527, 0 905935, 1.11, 1528, 0 每当标记重复产品id组中的最低价格项目时,我想用1更新默认列

我有以下示例表数据:

id, price, product_id, default
905928, 2.92, 1523, 0
905929, 2.89, 1523, 0
905930, 3.92, 1524, 0
905931, 6.67, 1525, 0
905932, 11.92, 1526, 0
905933, 5.34, 1526, 0
905934, 3.92, 1527, 0
905935, 1.11, 1528, 0
每当标记重复产品id组中的最低价格项目时,我想用1更新默认列。因此,结果应该如下所示:

id, price, product_id, default
905928, 2.92, 1523, 0
905929, 2.89, 1523, 1
905930, 3.92, 1524, 1
905931, 6.67, 1525, 1
905932, 11.92, 1526, 0
905933, 5.34, 1526, 1
905934, 3.92, 1527, 1
905935, 1.11, 1528, 0
905936, 0.11, 1528, 1
905937, 1.89, 1528, 0
提前感谢。

试试这个:

update yourtable a
inner join
(select product_id, min(price) minprice from
 yourtable 
 group by product_id
) b
on a.product_id = b.product_id
inner join 
(select product_id, price, min(id) minid from
 yourtable
 group by product_id, price
) c
on a.product_id = c.product_id and c.price = b.minprice
set defaultvalue = 1
where a.price = b.minprice
and a.id = c.minid
演示


第二个
join
用于获取
id
的最小值,对于同一
product\u id
的多个记录具有最低
价格的情况,这几乎是存在的。唯一的问题是,当存在重复的价格时,每列中都会有一个1。我需要这个来向最低的结果添加“1”一次,而不是每次重复。您如何决定更新哪一行?基于最低的
id
?是的,它可以基于最低的id。但我相当冷漠。只要它为每个产品标识一次,并且是最低的价格。我的实现只更新最低的
id
以获得最低的
price
,所以我认为它符合您的目的。如果有帮助,请记住将其标记为已接受。抱歉,我在意识到更新之前阅读了您的问题。这就解决了!谢谢。我已经更新了我的答案来处理重复的问题。