Comment puis-je supprimer tous les doublons dans une table MySQL sans tables temporaires
J'ai vu un certain nombre de variations de cette, mais rien ne correspond à ce que je suis en train d'accomplir.
J'ai une table, TableA
, qui contiennent les réponses données par les utilisateurs configurables questionnaires. Les colonnes sont member_id, quiz_num, question_num, answer_num
.
En quelque sorte un peu de membres ont obtenu leurs réponses à deux reprises. J'ai donc besoin de supprimer la copie des enregistrements, mais assurez-vous qu'une ligne est laissé derrière.
Il n'y a pas de primaire colonne il pourrait donc y avoir deux ou trois rangées de tous avec exactement les mêmes données.
Est-il une requête pour supprimer tous les doublons?
- Est-il une raison pour laquelle vous êtes à l'encontre de la création d'une table temporaire qui peut être retiré avec une simple instruction drop table après les doublons ont été supprimés? Je pourrais vous fournir SQL pour créer une table temporaire avec uniquement les enregistrements uniques, supprimer des enregistrements de la table d'origine, la charge unique de données puis déposez la table temp. Si ce n'est pas une énorme base de données, que cela ne devrait pas prendre trop longtemps. Voici un bon article sur le processus: databasejournal.com/features/mysql/article.php/10897_2201621_2/...
- double possible de Comment supprimer des enregistrements en double dans la base de données mysql?
- Je suis à la recherche d'une solution qui est facile (dans le sens le plus large du mot) répétable à la volée. À l'aide de tables supplémentaires, temp ou pas, les moyens à faire tomber le site de tout temps, ce qui est détecté. La meilleure solution serait de faire en sorte qu'il n'arrive jamais à la première place, mais jusqu'alors, je veux que cette vérification/correction à faire sur une base régulière pour s'assurer que les rapports ne donnent pas chancelant résultats
- Comme je l'ai mentionné dans ma réponse de créer un index sur votre table, Il va supprimer les doublons de données, et vous permet pas d'ajouter des données en double dans l'avenir
- Double Possible de Supprimer les lignes en double dans MySQL
Vous devez vous connecter pour publier un commentaire.
Ajouter Index Unique sur votre table:
Une autre façon de faire serait:
Ajouter une clé primaire dans la table, alors vous pouvez facilement supprimer les doublons de votre table à l'aide de la requête suivante:
alter ignore table
pourrait disparaître de sitôt: dev.mysql.com/worklog/task/?id=7395alter ignore table
travaillé pour moi que quandset session old_alter_table=1
a été utilisé avant.Ce n'est pas l'utilisation de Tables temporaires, mais de véritables tableaux à la place. Si le problème est juste sur les tables temporaires et non pas sur la création de la table ou de faire tomber les tables, cela va fonctionner:
Au lieu de
drop table TableA
, vous pouvez supprimer tous les registres (delete from TableA;
), puis de renseigner la table d'origine avec les registres provenant de TableA_Verify (insert into TAbleA select * from TAbleA_Verify
). De cette façon, vous n'aurez pas perdu toutes les références à la table d'origine (index,... )Grâce à jveirasv pour la réponse ci-dessus.
Si vous avez besoin de supprimer les doublons d'un des ensembles spécifiques de la colonne, vous pouvez l'utiliser (si vous avez un timestamp dans le tableau qui varient par exemple)
Ajouter un Index Unique sur votre table:
est le travail très bien
Si vous n'utilisez pas une clé primaire, puis exécuter les requêtes suivantes en un seul coup. En remplaçant les valeurs:
Il est toujours conseillé de prendre la sauvegarde de la base de données avant de jouer avec elle.
Comme indiqué dans les commentaires, la requête en Saharsh du Shah, la réponse doit être exécuté plusieurs fois si les articles sont répétées plus d'une fois.
Voici une solution qui n'est pas de supprimer les données, et permet de conserver les données dans la table d'origine, tout le temps, permettant de doublons supprimés tout en gardant la table en "direct":
Fondamentalement vérifie si la ligne en cours est le même que la dernière ligne, et si elle est, il marque des doublons (le relevé de l'ordre s'assure que les doublons montrera les unes à côté des autres). Ensuite, vous supprimez des enregistrements en double. - Je supprimer le
duplicate
colonne à la fin de la ramener à son état d'origine.Il ressemble
alter table ignore
pourrait également disparaître de sitôt: http://dev.mysql.com/worklog/task/?id=7395Une alternative serait de créer une nouvelle table temporaire avec la même structure.
Puis créer la clé primaire dans la table.
Enfin copie de tous les enregistrements de la table d'origine, tout en ignorant les enregistrements en double.
Maintenant, vous pouvez supprimer la table d'origine et renommez la nouvelle table.