Maison > base de données > tutoriel mysql > le corps du texte

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

coldplay.xixi
Libérer: 2020-09-29 15:19:36
original
6462 Les gens l'ont consulté

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
Copier après la connexion

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;
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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)
Copier après la connexion

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;
Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal