2010-05-20 149 views
3

我想更新一個表,刪除除組的第一個實例以外的所有組件。基本上,我有一張包含與保險單相關的車輛數據的表格。每個政策只能有一個power_unit。其他一切都應該是拖曳的單位。不幸的是,一個錯誤一直在複製動力單元,現在我需要清理它。數據庫中有大約10k條記錄,其中約4k條記錄使功率單位翻倍。只更新一個結果?

我的表的重要位(稱之爲TEST1現在)是:

+------------+---------+------+-----+---------+----------------+ 
| Field  | Type | Null | Key | Default | Extra   | 
+------------+---------+------+-----+---------+----------------+ 
| id   | int(10) | NO | PRI | NULL | auto_increment | 
| policy_id | int(10) | NO |  | NULL |    | 
| power_unit | int(1) | NO |  | 0  |    | 
+------------+---------+------+-----+---------+----------------+ 

和一些示例數據:

+----+-----------+------------+ 
| id | policy_id | power_unit | 
+----+-----------+------------+ 
| 1 |   1 |   1 | 
| 2 |   1 |   1 | 
| 3 |   1 |   1 | 
| 4 |   2 |   1 | 
| 5 |   2 |   1 | 
| 6 |   2 |   1 | 
| 7 |   4 |   1 | 
| 8 |   4 |   1 | 
| 9 |   4 |   1 | 
| 10 |   5 |   1 | 
| 11 |   5 |   1 | 
| 12 |   6 |   1 | 
+----+-----------+------------+ 

基本上我想結束了在那裏policy_id 1具有隻有一個power_unit=1。對於policy_id 2,3,4等,相同。對於policy_id 6,沒有什麼應該改變(只有一個條目,並且它已經是power_unit)。

我不知道這是否可能,但對我來說這是一個有趣的問題,所以我想你們可能會發現它是一樣的。

更新:
我不想DELETE行,只是UPDATE他們有power_unit=0

回答

4
UPDATE test1 t1, 
     (
     SELECT policy, MIN(ti.id) AS mid 
     FROM test1 ti 
     GROUP BY 
       policy 
     ) tm 
SET  power_unit = 0 
WHERE t1.policy = tm.policy 
     AND t1.id <> tm.mid; 
+0

奇妙地工作。謝謝! – 2010-05-20 18:44:50