MySQL: Nach Dubletten suchen

Grundsätzlich ist bei Dubletten zwischen eindeutigen und unscharfen Dubletten zu unterscheiden. Eindeutige Dubletten, also Dubletten bei denen alle Treffer bis auf die Groß-Kleinschreibung Zeichen für Zeichen übereinstimmen, sind mit SQL-Abfragen relativ leicht zu finden. Bei der folgenden Abfrage beispielsweise liefert MySQL alle Datensätze zurück bei denen der Inhalt des Datenfelds 'name' übereinstimmt:

SELECT tab1.id, tab1.name, tab2.id, tab2.name
FROM tablename tab1, tablename tab2
WHERE tab1.name=tab2.name
AND tab1.id<>tab2.id
AND tab1.id=(SELECT MAX(id) FROM tablename tab
WHERE tab.name=tab1.name)

Wie man sieht ist für diese SQL-Abfrage eine Spalte mit einer ID nötig, die den jeweiligen Datensatz eindeutig identifiziert, um sicher zu stellen, dass ein Datensatz nicht mit sich selbst verglichen wird. Darüber hinaus wird diese ID benötigt, um sicher zu stellen, dass der Datensatz mit der größten ID nur in der Spalte 'tab1.id', nicht aber auch in der Spalte 'tab2.id' auftaucht. Auf diese Weise wird sichergestellt, dass der Datensatz mit der größten ID aus einer Dublettengruppe nicht mit gelöscht wird. Die IDs der Datensätze die gelöscht werden sollen stehen in der Spalte 'tab2.id'. In einen DELETE-Befehl für MySQL eingebaut sieht das Ergebnis dann folgendermaßen aus:

DELETE FROM tablename 
WHERE id IN
(SELECT tab2.id
FROM tablename tab1, tablename tab2
WHERE tab1.name=tab2.name
AND tab1.id<>tab2.id
AND tab1.id=(SELECT MAX(id) FROM tablename tab
WHERE tab.name=tab1.name))

Dieser SQL-Befehl lässt sich natürlich leicht dahingehend erweitern, dass neben dem Inhalt des Datenfelds 'name' auch noch weitere Datenfelder, beispielsweise die Datenfelder die zusammen die postalische Adresse enthalten, mit verglichen werden.

Welche Möglichkeiten SQL für die Suche nach unscharfen Dubletten bietet können Sie in dem Artikel 'Unscharfe Dublettensuche mit SQL' nachlesen. Zufriedenstellend gelöst werden aber kann dieses Problem nur von spezialisierten Tools, die eine fehlertolerante Dublettensuche bieten, wie zum Beispiel die auf www.DataQualityApps.de erhältlichen DataQualityTools und der DeduplicationWizard. Wie man den DeduplicationWizard dafür einsetzt um innerhalb von einer Tabelle nach doppelten Adressen zu suchen können Sie in dem Artikel 'Dublettensuche mit dem DeduplicationWizard' nachlesen. Wie man mit Hilfe der DataQualityTools zwischen zwei Tabellen nach doppelten Adressen sucht können Sie in dem Artikel 'Sperrlisten mit den DataQualityTools verarbeiten' nachlesen. Und in dem Artikel 'Zeitgesteuerte Dublettensuche mit dem BatchDeduplicator' können Sie nachlesen wie man die Suche nach doppelten Adressen automatisieren kann.

Autor: Thomas Hainke