2014-05-06 35 views
0

我有下面的示例表数据:MYSQL选择更新鲜明的栏目,基于最低值

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 

我想更新与1默认列,只要重复的产品ID组内价格最低的项目被标记。所以结果应该是这样的:

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 

在此先感谢。

+0

我已经更新了我的答案来处理重复。 –

回答

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 

演示here

第二个join用于在多个记录的最低值为priceproduct_id相同的情况下获得最小值id

+0

嗨shree.pat18这几乎就在那里。唯一的问题是每个列中有1个重复的价格。我需要这个来为最低结果添加一个'1'而不是每个重复时间。 – user3606151

+0

你如何决定更新哪一行?基于最低的'ID'? –

+0

是的,它可以基于最低的ID。但我相当无动于衷。只要它每个product_id标记一次,并且它是最低的价格。 – user3606151