Ich weiß, das Löschen von Duplikaten aus MySQL wird hier oft diskutiert. Aber keine der Lösungen funktioniert gut in meinem Fall.Löschen von Duplikaten aus großen MySQL Adresse DB
So habe ich eine DB mit Adressdaten fast wie folgt aus:
ID; Anrede; Vorname; Nachname; Strasse; Hausnummer; PLZ; Ort; Nummer_Art; Vorwahl; Rufnummer
ID ist Primärschlüssel und einzigartig.
Und ich habe entrys zum Beispiel wie folgt aus:
1;Herr;Michael;Müller;Testweg;1;55555;Testhausen;Mobile;;67890
2;Herr;Michael;Müller;Testweg;1;55555;Testhausen;Fixed;045678;877656
Die verschiedenen Phone sind nicht das Problem, weil sie für mich nicht relevant sind. Also möchte ich nur die Duplikate in Nachname, Straße und Postleitzahl löschen. In diesem Fall ID 1 oder ID 2. Welche von beiden ist egal.
Ich habe versucht, es so eigentlich mit Lösch:
DELETE db
FROM Import_Daten db,
Import_Daten dbl
WHERE db.id > dbl.id AND
db.Lastname = dbl.Lastname AND
db.Strasse = dbl.Strasse AND
db.PLZ = dbl.PLZ;
und eine Kopie Tabelle einfügen in:
INSERT INTO Import_Daten_1
SELECT MIN(db.id),
db.Anrede,
db.Firstname,
db.Lastname,
db.Branche,
db.Strasse,
db.Hausnummer,
db.Ortsteil,
db.Land,
db.PLZ,
db.Ort,
db.Kontaktart,
db.Vorwahl,
db.Durchwahl
FROM Import_Daten db,
Import_Daten dbl
WHERE db.lastname = dbl.lastname AND
db.Strasse = dbl.Strasse And
db.PLZ = dbl.PLZ;
Die vollständige Tabelle über 10Mio Zeilen enthält. Die Größe ist eigentlich mein Problem. Die mysql läuft auf einem MAMP Server auf einem Macbook mit 1,5GHZ und 4GB RAM. Also nicht wirklich schnell. SQL-Anweisungen werden in einem phpmyadmin ausgeführt. Eigentlich habe ich keine anderen Systemmöglichkeiten.
Phantastisch! War wirklich schnell! Danke vielmals! – swapfile
Um das Einfügen von Duplikaten zu verhindern, können wir einen eindeutigen Index für Felder (Feldname, Straße, PLZ) hinzufügen. – olegsv
Wenn Sie diese Lösung zum ersten Mal anwenden, werden alle doppelten Datensätze gelöscht. Es wird keine Kopie des doppelten Datensatzes hinterlassen. – olegsv