Doppelte Datensätze aufspüren und löschen

Lies diesen Artikel und viele weitere mit einem kostenlosen, einwöchigen Testzugang.

Autor: Klaus Giesen, Wuppertal

Doppelte Datensätze können Plage und Fluch einer jeden Access-Datenbank sein. Abgesehen vom Speicherplatzbedarf und der damit verbundenen Performance-Beeinträchtigung treten noch andere und möglicherweise schwerwiegendere Probleme auf. Dazu zählen beispielsweise überflüssige Sendungen bei Mailingaktionen oder schlicht und einfach der schlechte Eindruck, der entsteht, wenn Kunden mehrfach die gleiche Post erhalten. Deshalb sollten in solchen Datenbankanwendungen passende Möglichkeiten vorhanden sein, diese doppelten Datensätze bequem aufzuspüren und zu entfernen.

Die Beispieldatenbank, die auf der beiliegenden CD-ROM für Access 97 Doppelt97.mdb und Access 2000 Doppelt2000.mdb (Rubrik Musterlösungen) vorhanden ist, ist eine einfache Kontaktverwaltung. Die Tabelle tblKontakte enthält ca. 140 Datensätze mit etlichen Duplikaten.

Bild 1: Das Dialogfenster Neue Abfrage

Access verfügt über einen eingebauten Assistenten zur Suche von doppelten Datensätzen. Im Folgenden finden Sie zunächst die Beschreibung der Anwendung des Assistenten und anschließend die theoretischen Grundlagen.

Der Abfrage-Assistent zurDuplikatsuche

Die Suche nach Duplikaten in der Tabelle tblKontakte der Beispieldatenbank erfolgt bei diesem Beispiel über die Felder Nachname und Vorname.

Bild 2: Auswahl der Tabelle

  • Klicken Sie im Datenbankfenster unter Abfragen auf die Schaltfläche Neu.
  • Wählen Sie im Dialogfenster Neue Abfrage den Abfrage-Assistenten zur Duplikatsuche aus (siehe Bild 1).
  • Im nächsten Schritt des Assistenten legen Sie die Tabelle oder Abfrage fest, in der nach Duplikaten gesucht werden soll (siehe Bild 2). Durch die Verwendung einer Abfrage können Sie auch in verknüpften Tabellen nach Duplikaten suchen.
  • Wählen Sie im nächsten Schritt die Suchfelder aus: Bei unserem Beispiel sind das die Felder Nachname und Vorname (siehe Bild 3).
  • Legen Sie anschließend noch fest, welche weiteren Felder im Abfrageergebnis ausgegeben werden sollen.
  • Bild 3: Festlegen der Suchfelder

    Bild 4: Resultat der Duplikatsuche

  • Speichern Sie die Suche unter einem passenden Namen, damit sie als Abfrage im Datenbankfenster für weitere Duplikatsuchen zur Verfügung steht.
  • Die Datenblattansicht der Abfrage zeigt anschließend diejenigen Datensätze an, die in den beiden festgelegten Suchfeldern Nachname und Vorname über identische Einträge oder Werte verfügen (siehe Bild 4).

    Damit ist der erste Teil der Aufgabe bereits gelöst: Die doppelten Datensätze in der Tabelle sind gefunden.

    Bild 5: Abfrage zur Duplikatsuche in der Entwurfsansicht

    Vor den überlegungen zum Löschen dieser Datensätze folgen nun zunächst einige Bemerkungen zur Funktionsweise des Assistenten zur Duplikatsuche.

    Funktionsweise des Assistenten zur Duplikatsuche

    Die Funktionsweise des Assistenten zu Duplikatsuche wird auf den ersten Blick in der Entwurfsansicht der Abfrage deutlich (siehe Bild 5).

    Der Anfang des SQL-Statements im Abfragekriterium

    In (SELECT [Nachname]...

    für das Feld Nachname weist auf die Verwendung einer Unterabfrage hin.

    Unterabfragen bestehen aus einer SQL SELECT-Anweisung innerhalb einer anderen Auswahl- oder Aktionsabfrage.

    Eine solche SQL-Anweisung kann entweder zur Definition eines neuen Feldes in der Zeile Feld oder zur Festlegung von Kriterien in der Zeile Kriterien des Abfrage-Entwurfsbereichs eingegeben werden.

    Die Unterabfrage des Assistenten zur Duplikatsuche ermittelt schließlich, welche Datensätze in den ausgewählten Suchfeldern mehr als einmal vorkommen.

    Bild 6: Einstellung der Index-Eigenschaften

    In (SELECT [Nachname] FROM [tblKontakte_01] As Tmp GROUP BY [Nachname],[Vorname] HAVING Count(*)>1  And [Vorname] = [tblKontakte_01].[Vorname])

    Quellcode 1

    Hinweis

    Ein mit einer Unterabfrage definiertes Feld kann nicht zum Gruppieren von Datensätzen verwendet werden.

    Das vollständige SQL-Statement der Unterabfrage ist in Quellcode 1 abgedruckt.

    Das Ergebnis der Abfrage zeigt an, dass doppelte Datensätze in der Tabelle vorhanden sind. Das ist die Ausgangslage für das weitere Vorgehen: das Löschen der Duplikate.

    Zur Lösung dieses Problems gibt es wie so häufig bei Access verschiedene Möglichkeiten: eine elegante und eine weniger elegante Lösung. Wir beginnen mit der letzteren.

    Duplikate löschen per neuer Tabelle und Anfügeabfrage

    Diese Lösung erfordert eine Menge Handarbeit. Deswegen wird sie hier auch nur der Vollständigkeit halber kurz erwähnt.

  • Legen Sie zunächst eine Kopie der betreffenden Tabelle an.
  • Kopieren Sie dabei von der Ausgangstabelle lediglich die Struktur der Tabelle ohne Daten.
  • Definieren Sie in dieser leeren Tabelle einen eindeutigen Index.
  • Die Auswahl des Feldes bzw. der Felder für diesen eindeutigen Index hängt von dem Feld bzw. den Feldern ab, in denen Sie die Duplikate suchen wollen.

    Falls es sich beispielsweise um die Felder Nachname und Vorname handeln sollte, versehen Sie diese beiden Felder mit einem Index und stellen Sie die Feld-Eigenschaft Indiziert auf den Wert Ja (Ohne Duplikate) ein (siehe Bild 6).

    Fügen Sie dann mit Hilfe einer Anfügeabfrage die Datensätze aus der Originaltabelle an die Tabellenkopie an.

    Auf Grund des eindeutig definierten Indexes der neuen Tabelle werden die doppelten Datensätze aus der Originaltabelle jeweils nur einmal übernommen und das Problem ist damit gelöst.

    Diese Methode hat allerdings folgende Nachteile:

  • Falls die Originaltabelle zu einer Tabellenbeziehung gehört, wird bzw. werden diese nicht übernommen und müssen anschließend neu festgelegt werden.
  • Der größte Nachteil dieser Methode ist – wie schon erwähnt -, dass einfach zu viel Handarbeit notwendig ist.
  • Duplikate löschen per Löschabfrage

    Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

    Testzugang

    eine Woche kostenlosen Zugriff auf diesen und mehr als 1.000 weitere Artikel

    diesen und alle anderen Artikel mit dem Jahresabo

    Schreibe einen Kommentar