ACCESS: 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. Zwar enthält der Abfrage-Assistent in ACCESS eine Option um eine Abfrage für die Duplikatsuche zu erstellen. Das Ergebnis listet aber lediglich die doppelt vorkommenden Begriffe und die Anzahl wie oft diese in der Tabelle vorkommen auf. Gelöscht werden können die gefundenen Dubletten auf diesem Wege leider nicht. Um eine eigene SQL-Abfrage für diesen Zweck kommt man daher auch in ACCESS nicht herum.
Am einfachsten erstellt man dazu zunächst einen neuen Abfrageentwurf und wechselt dann über den Menüeintrag 'SQL-Ansicht' aus dem Kontextmenü dort oder über das kleine 'SQL'-Symbol ganz unten am rechten Rand des Fensters zur direkten Eingabe von SQL-Befehlen. An dieser Stelle kann man dann, wie bei anderen Datenbankservern auch, direkt SQL-Befehle eingeben. Mithilfe der Schaltfläche 'Ausführen' kann der eingegebene SQL-Befehl ausgeführt werden. Über das kleine 'SQL'-Symbol ganz unten am rechten Rand des Fensters kommt man von hier aus zurück zur dazugehörigen SQL-Abfrage.
Bei der folgenden Abfrage beispielsweise liefert ACCESS 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 ACCESS 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



