43 votes

Le script SQL "Get Duplicates" le plus rapide (script)

Quel est un exemple de SQL rapide pour obtenir les doublons dans des ensembles de données contenant des centaines de milliers d'enregistrements ? J'utilise généralement quelque chose comme :

SELECT afield1, afield2 FROM afile a 
WHERE 1 < (SELECT count(afield1) FROM afile b WHERE a.afield1 = b.afield1);

Mais c'est assez lent.

78voto

Vinko Vrsalovic Points 116138

C'est le moyen le plus direct :

select afield1,count(afield1) from atable 
group by afield1 having count(afield1) > 1

16voto

Tony Andrews Points 67363

Vous pouvez essayer :

select afield1, afield2 from afile a
where afield1 in
( select afield1
  from afile
  group by afield1
  having count(*) > 1
);

5voto

Walter Mitty Points 8726

Une question similaire a été posée la semaine dernière. On y trouve quelques bonnes réponses.

SQL pour trouver les entrées dupliquées (dans un groupe)

Dans cette question, le PO était intéressé par toutes les colonnes (champs) de la table (fichier), mais les lignes appartiennent au même groupe si elles ont la même valeur de clé (champ1).

Il y a trois types de réponses :

des sous-requêtes dans la clause where, comme certaines des autres réponses ici.

une jointure interne entre la table et les groupes vus comme une table (ma réponse)

et les requêtes analytiques (ce qui est nouveau pour moi).

5voto

Magnus Smith Points 2177

Au fait, si quelqu'un veut supprimer les doublons, j'ai utilisé ceci :

delete from MyTable where MyTableID in (
  select max(MyTableID)
  from MyTable
  group by Thing1, Thing2, Thing3
  having count(*) > 1
)

3voto

Simon Points 4467

Cela devrait être raisonnablement rapide (encore plus rapide si les dupeFields sont indexés).

SELECT DISTINCT a.id, a.dupeField1, a.dupeField2
FROM TableX a
JOIN TableX b
ON a.dupeField1 = b.dupeField2
AND a.dupeField2 = b.dupeField2
AND a.id != b.id

Je suppose que le seul inconvénient de cette requête est que, parce que vous ne faites pas un COUNT(*) vous ne pouvez pas vérifier la nombre de fois il est dupliqué, seulement qu'il apparaît plus d'une fois.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X