2012-07-28 9 views
0

J'ai quelques lignes dans une base de données MySQL qui sont des doublons, à l'exception de leur numéro d'identification.Comment supprimer des lignes dupliquées dans MySQL?

Par exemple, je pourrais avoir ce que deux lignes:

ID | wordlist | category 
845 | abashed | confused 
1800 | abashed | confused 

Je veux trouver tous, et ne quitter. Puis-je utiliser SQL pour ce faire, ou ai-je besoin d'écrire un programme quelconque?

Pour clarifier, je veux seulement obtenir des doublons dans la section de liste de mots.

+0

s'ils sont référencés dans une autre table qui laisserait votre base de données incorrecte car vous ne saurez pas quel ID a été référencé pour un mot répétitif particulier – codingbiz

+0

Ils ne le sont pas, erreur d'importation. –

Répondre

1

Vous pouvez le faire avec une jointure externe dans la déclaration DELETE:

DELETE a FROM tbl a 
LEFT JOIN 
(
    SELECT MIN(id) AS id 
    FROM tbl 
    GROUP BY wordlist 
) b ON a.id = b.id 
WHERE a.category = '<category here>' AND b.id IS NULL 

Cela permettra d'éliminer les doublons (dans la colonne wordlist) pour seulement une catégorie spécifique et maintient celui avec le id le plus bas .

+0

Je ne souhaite PAS supprimer les doublons dans la section catégorie. Juste la section de la liste de mots. –

+0

@AndrewAlexander, d'accord, a sorti le champ 'category' dans le' GROUP BY'. Essayez ça. –

+0

Oh merde, j'ai supprimé des informations supplémentaires avec ce que je voulais. Je voulais seulement supprimer les mots qui étaient en double dans une catégorie donnée. Pas ta faute, c'était proche de ce dont j'avais besoin, je t'ai donné des informations incorrectes. –

0
ALTER IGNORE TABLE your_table ADD UNIQUE INDEX idx_wordlist (wordlist); 
+0

"Dupliquer l'entrée" acceptable "pour la clé" index_wordlist "" –

Questions connexes