Cet article est un article miroir de traduction automatique, veuillez cliquer ici pour accéder à l’article original.

Vue: 14609|Répondre: 0

[Pourboires] SQL Comment interroger une table pour supprimer les doublons

[Copié le lien]
Publié sur 09/10/2014 11:03:04 | | |

Les requêtes SQL à table unique/multiple suppriment les enregistrements dupliqués

Table distincte

  1. select distinct 字段 from 表
Code de copie

Beaucoup de votes sont regroupés par

Le groupe de doit être placé avant la limite de commande par et de l’ordre, sinon une erreur sera signalée

************************************************************************************

1. Trouver les enregistrements doublons redondants dans le tableau, et les enregistrements dupliqués sont jugés sur la base d’un seul champ (peopleId).

sélectionner * parmi les personnes
où peopleId in (sélectionnez peopleId parmi les groupes de personnes par peopleId ayant count(peopleId) > 1)

2. Supprimez les enregistrements redondants en double dans le tableau, et les enregistrements dupliqués sont jugés sur la base d’un seul champ (peopleId), ne laissant que les enregistrements avec le plus petit rowid
supprimer des personnes
où peopleId in (sélectionnez peopleId parmi les groupes de personnes par peopleId ayant count(peopleId) > 1)
et rowid not in (sélectionner min(rowid) dans le groupe de personnes par peopleId ayant comptage(peopleId )>1)

3. Trouver les enregistrements redondants en double (champs multiples) dans le tableau
sélectionner * à partir du vitae a
où (a.peopleId,a.seq) dans (sélectionnez peopleId,seq du groupe vitae par peopleId,seq ayant le compte(*) > 1)

4. Supprimer les enregistrements dupliqués redondants (champs multiples) dans la table, ne laissant que les enregistrements avec le plus petit rowid
supprimer du vitae a
où (a.peopleId,a.seq) dans (sélectionnez peopleId,seq du groupe vitae par peopleId,seq ayant le compte(*) > 1)
et rowid not in (sélectionner min(rowid) du groupe vitae par peopleId,seq ayant count(*)>1)


5. Trouver les enregistrements redondants (plusieurs champs) dans la table, et ne contiennent pas les enregistrements avec le moins de rowid
sélectionner * à partir du vitae a
où (a.peopleId,a.seq) dans (sélectionnez peopleId,seq du groupe vitae par peopleId,seq ayant le compte(*) > 1)
et rowid not in (sélectionner min(rowid) du groupe vitae par peopleId,seq ayant count(*)>1)

(deux)
Par exemple
Il y a un champ « nom » dans le tableau A,
Et la valeur du « nom » peut être la même entre différents enregistrements,
Vous devez maintenant interroger les éléments avec des valeurs « nom » en double entre les enregistrements dans la table ;
Sélectionnez Nom, Compte(*) d’un groupe par nom ayant Compte(*) > 1

Si le genre est également le même, il est le suivant :
Sélectionnez le nom, le sexe, le nombre de personnes dans un groupe par nom, le sexe ayant le compte(*) > 1

(trois)
Méthode 1

déclarons @max entier, @id entier

déclarer cur_rows curseur local pour sélectionner le champ principal, compter(*) depuis le groupe de noms de tableau par le champ principal ayant compte(*) > ; 1

Ouvert cur_rows

Apporte cur_rows dans @id,@max

tandis que @@fetch_status=0

Début

sélectionner @max = @max -1

Définir le nombre de lignes @max

supprimer du nom du tableau où le champ principal = @id

Apporte cur_rows dans @id,@max
Fin

Fermer cur_rows

Set Rowcount 0

Méthode 2

Les « enregistrements dupliqués » ont deux significations pour les enregistrements dupliqués : l’un est un enregistrement complètement dupliqué, c’est-à-dire un enregistrement avec tous les champs dupliqués, et l’autre est un enregistrement avec des parties dupliquées des champs clés, comme le champ Nom qui est dupliqué, tandis que les autres champs ne sont pas nécessairement dupliqués ou peuvent être ignorés.

1. Pour le premier type de répétition, il est relativement facile à résoudre et à utiliser

select distinct * from tableName

Vous pouvez obtenir le set de résultats sans enregistrements en double.

Si vous devez supprimer des enregistrements en double (garder un enregistrement en double), vous pouvez les supprimer comme suit

sélectionner distinct * dans #Tmp depuis tableName

table de dépôt Nom

select * dans tableName depuis #Tmp
Tableau de #Tmp

Cette duplication se produit à cause d’une mauvaise conception des tables et peut être résolue en ajoutant des colonnes d’index uniques.

2. Ce type de problème de duplique nécessite généralement de conserver le premier enregistrement de l’enregistrement dupliqué, et la méthode de fonctionnement est la suivante

Supposons qu’il existe des champs en double de Nom et d’Adresse, et que vous deviez obtenir un ensemble de résultats unique pour ces deux champs

select identity(int,1,1) comme autoID, * vers #Tmp depuis tableName

select min(autoID) comme autoID dans #Tmp2 depuis #Tmp groupe par Name,autoID

select * from #Tmp where autoID in (select autoID from #tmp2)

Le dernier select obtient l’ensemble de résultats Name et Address qui ne sont pas répétés (mais il existe un champ autoID supplémentaire, qui peut être écrit dans la clause select lors de l’écriture réelle)

(4)
Les requêtes sont dupliquées

Sélectionnez * depuis Nom de la Table où l’ID est (sélectionnez l’ID depuis Nom de la Table

Groupe par ID

ayant le compte(id) > 1

)

3. Trouver les enregistrements redondants en double (champs multiples) dans le tableau
sélectionner * à partir du vitae a
où (a.peopleId,a.seq) dans (sélectionnez peopleId,seq du groupe vitae par peopleId,seq ayant le compte(*) > 1)

Courir va poser problème, et écrire et envoyer comme where(a.peopleId, a.seq) ne fonctionnera pas !!






Précédent:SQL crée des procédures stockées avec des paramètres
Prochain:Lecteur EPUBReader, indispensable pour ouvrir les fichiers EPUB
Démenti:
Tous les logiciels, supports de programmation ou articles publiés par Code Farmer Network sont uniquement destinés à l’apprentissage et à la recherche ; Le contenu ci-dessus ne doit pas être utilisé à des fins commerciales ou illégales, sinon les utilisateurs assumeront toutes les conséquences. Les informations sur ce site proviennent d’Internet, et les litiges de droits d’auteur n’ont rien à voir avec ce site. Vous devez supprimer complètement le contenu ci-dessus de votre ordinateur dans les 24 heures suivant le téléchargement. Si vous aimez le programme, merci de soutenir un logiciel authentique, d’acheter l’immatriculation et d’obtenir de meilleurs services authentiques. En cas d’infraction, veuillez nous contacter par e-mail.

Mail To:help@itsvse.com