|
Les requêtes SQL à table unique/multiple suppriment les enregistrements dupliqués Table distincte - 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 !!
|