Maison >base de données >tutoriel mysql >Comment supprimer les données en double de la base de données MySQL

Comment supprimer les données en double de la base de données MySQL

coldplay.xixi
coldplay.xixioriginal
2020-09-29 15:19:366465parcourir

Comment supprimer les données en double de la base de données MySQL : 1. Recherchez l'enregistrement qui doit être supprimé et un enregistrement sera conservé ; 2. Supprimez l'enregistrement en double et un seul enregistrement sera conservé. est [supprimer a de test1 a, (.. .) comme offre de test1 c où ..].

Comment supprimer les données en double de la base de données MySQL

Comment supprimer les données en double dans la base de données MySQL :

1. Recherchez l'enregistrement qui doit être supprimé, et un dossier sera conservé.

select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid

2. Supprimez les enregistrements en double et ne conservez qu'un seul enregistrement. Notez que le sujet,RECEIVER doit être indexé, sinon il sera très lent.

delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;

3. Recherchez les enregistrements en double redondants dans la table. Les enregistrements en double sont jugés en fonction d'un seul champ (peopleId

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

4. Supprimez les enregistrements en double redondants dans la table. jugé sur la base d'un seul champ. Champ (peopleId) à juger, en ne laissant que l'enregistrement avec le plus petit rowid

delete from people where peopleId in (select peopleId from people group by peopleId  having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)

5 Supprimez les enregistrements en double redondants (plusieurs champs) dans la table, en ne laissant que l'enregistrement avec le. smallest rowid

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)

Il semble que si vous voulez être paresseux et utiliser une commande pour terminer cette chose, cela ne semble pas évident. Traitons-le étape par étape. L'idée est de créer et de copier. une table temporaire d'abord, puis comparez les données de la table temporaire et supprimez les données de la table principale

alter table tableName add autoID int auto_increment not null; 
 
create table tmp select min(autoID) as autoID from tableName group by Name,Address; 
 
create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; 
 
drop table tableName; 
 
rename table tmp2 to tableName;

Plus de recommandations d'apprentissage gratuites associées : tutoriel mysql(vidéo)

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn