IBM DB2: Nach Dubletten suchen (doppelte Datensätze)

Sind Dubletten bei kleinen Datenbeständen schon kaum von Hand in den Griff zu bekommen, so sind sie bei großen Datenmengen, wie sie von Datenbankservern wie IBM DB2 verwaltet werden, nur noch mit den passenden Hilfsmitteln zu bewältigen.

Grundsätzlich ist bei Dubletten zwischen eindeutigen und unscharfen Dubletten zu unterscheiden. Mehr zum Thema unscharfe Dubletten finden Sie in dem Artikel "Dubletten mit geringen Abweichungen". Eindeutige Dubletten, also doppelte Datensätze 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 IBM DB2 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 IBM DB2  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 Suche nach doppelten Datensätzen bieten, wie zum Beispiel die DataQualityTools: