Frage

Was ist ein Beispiel für eine schnelle SQL, um Duplikate in Datensätzen mit Hunderttausenden von Datensätzen zu erhalten? Ich benutze normalerweise so etwas wie:

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

Aber das ist ziemlich langsam.

War es hilfreich?

Lösung

Dies ist der direktere Weg:

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

Andere Tipps

Du könntest es versuchen:

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

Eine ähnliche Frage wurde letzte Woche gestellt. Dort gibt es einige gute Antworten.

SQL, um doppelte Einträge zu finden (innerhalb einer Gruppe)

In dieser Frage interessierte sich das OP an allen Spalten (Feldern) in der Tabelle (Datei), aber Zeilen gehörten in dieselbe Gruppe, wenn sie den gleichen Schlüsselwert hatten (AFIELD1).

Es gibt drei Arten von Antworten:

Unterabfragen in der Where -Klausel, wie einige der anderen Antworten hier.

Eine innere Verbindung zwischen der Tabelle und den Gruppen, die als Tabelle angesehen werden (meine Antwort)

und analytische Abfragen (etwas, das für mich neu ist).

Übrigens, wenn jemand die Duplikate entfernen möchte, habe ich Folgendes verwendet:

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

Dies sollte einigermaßen schnell sein (noch schneller, wenn die Dupefields indiziert sind).

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

Ich denke, der einzige Nachteil dieser Abfrage ist das, weil Sie keine tun COUNT(*) Sie können nicht nach dem suchen Anzahl Es wird dupliziert, nur dass es mehr als einmal erscheint.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top