2010-05-20 7 views
3

J'essaye de mettre à jour une table pour enlever tout mais la première instance d'un groupe. Fondamentalement, j'ai une table avec des données de véhicule liées à une police d'assurance. Chaque stratégie ne doit avoir qu'un seul power_unit. Tout le reste devrait être une unité remorquée. Malheureusement, un bug a été la duplication des unités de puissance, et maintenant je dois nettoyer cela. Il y a ~ 10k enregistrements dans la base de données, et ~ 4k d'entre eux ont doublé les unités de puissance.Mettre à jour tous les résultats sauf un?

Les bits importants de ma table (appeler test1 pour l'instant) sont:

+------------+---------+------+-----+---------+----------------+ 
| 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  |    | 
+------------+---------+------+-----+---------+----------------+ 

Et certaines données de l'échantillon:

+----+-----------+------------+ 
| 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 | 
+----+-----------+------------+ 

En fait, je voudrais terminer là où policy_id 1 a un seul power_unit=1. Idem pour policy_id 2, 3, 4, etc. Pour policy_id 6, rien ne devrait changer (il n'y a qu'une seule entrée, et c'est déjà un power_unit).

Je ne sais pas si c'est possible, mais c'était un problème intrigant pour moi, alors j'ai pensé que vous pourriez trouver la même chose.

Mise à jour:
Je ne veux pas DELETE les lignes, juste UPDATE qu'ils ont power_unit=0.

Répondre

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

Cela a fonctionné de manière fantastique. Je vous remercie! –

Questions connexes