9
votes

MySQL Supprimer les premiers duplicats de la table

J'ai 511 duplicats dans ma table, j'ai besoin de les supprimer, mais pas des originaux. Par conséquent, je veux supprimer chaque deuxième occurrence de chaque duplicata.

Comment puis-je faire cela? P>

Table: P>

code  /   status  /   time
E3F4FF928A  /  0 /
07D95444BB  /  0 /  
07D95444BB /   0 / 
40006C128F  / 0  / 1315293012
2B45790E52   /  0  /
40006C128F  / 0  / 1315293012


5 commentaires

S'il vous plaît poster votre définition de table.


Sont-ils des doublons exacts ou avez-vous une clé unique quelque part là-bas?


Un vrai duplicata est la copie exacte de l'original. Avez-vous vraiment des duplicats ou avez-vous des lignes où de nombreuses données sont identiques, mais quelque chose comme la colonne AUTO INC ou la date de création sont différentes?


Vous devez fournir le schéma de la table (colonnes) ainsi que des données d'échantillon.


Supprimé supprimé


3 Réponses :


8
votes

Ajoutez un index unique à la table de la colonne qui doit être unique et ignorer les erreurs xxx

http://dev.mysql.com/doc/refman/5.1/fr/alter-table.html


7 commentaires

N'adresse pas Je veux supprimer chaque deuxième occurrence de chaque duplicata.


Ouais cela n'accomcit pas le résultat souhaité.


Soyez plus spécifique .. Vous avez un B A B C B A. Voulez-vous un b c ou voulez-vous un b c b?


En fait, le mysql Docs Spécifie: Seule la première ligne est utilisée de lignes avec des doublons sur une clé unique. Les autres lignes en conflit sont supprimées


+1, j'aime cette réponse, vous pouvez avoir besoin d'un index composé, il suffit d'ajouter des champs supplémentaires à l'index Index unique (COL1, COL2, COL3) .


Et bien comment puis-je le faire en supprimant la première occurrence?


Si c'est vraiment un duplicata, peu importe. Vous voudrez peut-être afficher des exemples de données et votre table def.



0
votes
DELETE t2 FROM table1 t2 
INNER JOIN table1 t1 ON 
      (t1.somefield = t2.somefield 
   AND t1.otherfield = t2.otherfield   /*add more fields if need be */
   AND t2.`timestamp` > t1.`timestamp`)
WHERE (1=1)        /*In some mode(s) MySQL requires a where clause with delete*/
ORDER BY t2.id ASC

0 commentaires

6
votes

Il suffit de courir dans ce problème aujourd'hui (pas de clé unique dans la table).

Je l'ai résolu comme ceci xxx

ceci supprimera la première ligne pour le Critères donnés (si vous avez des duplicats N, mettez N-1 pour ne conserver qu'un).


1 commentaires

ça ne répond pas à la question