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
,所以我认为它符合您的目的。如果有帮助,请记住将其标记为已接受。抱歉,我在意识到更新之前阅读了您的问题。这就解决了!谢谢。我已经更新了我的答案来处理重复的问题。