Quel est un exemple d'un SQL rapide pour obtenir des doublons dans des ensembles de données avec 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.
C'est le moyen le plus direct:
select afield1,count(afield1) from atable
group by afield1 having count(afield1) > 1
Tu pourrais essayer:
select afield1, afield2 from afile a
where afield1 in
( select afield1
from afile
group by afield1
having count(*) > 1
);
Une question similaire a été posée la semaine dernière. Il y a là de bonnes réponses.
SQL pour trouver les entrées en double (au sein d'un groupe)
Dans cette question, l'OP était intéressé par toutes les colonnes (champs) de la table (fichier), mais les lignes appartenaient au même groupe si elles avaient la même valeur de clé (afield1).
Il existe trois types de réponses:
sous-requêtes dans la clause where, comme certaines des autres réponses ici.
une jointure interne entre la table et les groupes considérés comme une table (ma réponse)
et les requêtes analytiques (quelque chose de nouveau pour moi).
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
)
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 de COUNT(*)
vous ne pouvez pas vérifier le nombre de fois il est dupliqué, seulement qu'il apparaît plus plus d'une fois.