2014-05-06 34 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