window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'G-TCJTE9L38H');

Inkonsistente Duplikate finden per Abfrage

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

Wenn Sie ein Datenmodell antreffen, das nicht vollständig normalisiert ist, kann es sein, dass dieses aufgrund seiner Beschaffenheit das Speichern von Duplikaten erlaubt. Das ist insbesondere interessant, wenn diese Daten in Tabellen vorliegen, die nicht der dritten Normalform entsprechen. Das bedeutet beispielsweise, dass Sie zu einer Bestellung in einer Bestellungen-Tabelle auch den Kunden inklusive Kundennummer und weiteren Kundendaten angeben. Bevor Sie eine solche Bestellungen-Tabelle in eine Bestellungen- und eine Kundentabelle aufteilen, sollten Sie sicherstellen, dass es keine Inkonsistenzen in den vermutlich bereits vorhandenen Duplikaten gibt und diese gegebenenfalls korrigieren. Um inkonsistente Daten in dieser Form zu finden, verwenden wir am einfachsten eine Abfrage. Wie Sie diese formulieren, zeigt Ihnen dieser Artikel.

Beispieldatenbank zum Finden von inkonsistenten Daten

Die Beispiele dieses Artikels finden Sie in der Datenbank 2101_InkonsistenteDaten.accdb.

Beispiel für inkonsistente Daten

Ein gutes Beispiel ist eine Tabelle mit Projekten oder Bestellungen, die direkt die jeweiligen Kundendaten speichern. Die Kundendaten landen dabei jeweils mit der Kundennummer und den übrigen Kundendaten in der Bestellungen-Tabelle.

Ein Beispiel für inkonsistente Daten finden Sie in der Tabelle aus Bild 1. Hier finden wir zwei Mal den Kunden mit dem Wert 1 im Feld KundeID.

Inkonsistente Daten

Bild 1: Inkonsistente Daten

Dabei taucht auch gleich eine Inkonsistent auf: Der Firmenname des Kunden erscheint einmal mit Minhorst und einmal mit Mienhorst. Solche Inkonsistenzen können aus verschiedenen Gründen entstehen, zum Beispiel

  • weil die Bestellannahme den Kundennamen einmal falsch und dann bei der nächsten Bestellung richtig eingetragen hat,
  • weil der Kunde selbst sich bei einer Onlinebestellung vertippt hat oder
  • weil sich die Adresse von einer Bestellung zur nächsten geändert hat – dann prüft und ändert man bei der Aufnahme einer neuen Bestellung eventuell nicht die zuvor verwendeten Daten.

Sie könnten einwenden, dass es ja sinnvoll ist, die Adresse des Kunden mit jeder Bestellung zu speichern, um später nachvollziehen zu können, wohin Sie die einzelnen Lieferungen geschickt haben. Das ist korrekt, aber hier wollen wir vereinfachend und zu Beispielzwecken davon ausgehen, dass die Adressen gleich bleiben und Unterschiede durch Tippfehler entstanden sind.

Inkonsistente Daten per Assistent finden

Neben dem Assistenten für die Duplikatsuche, den wir im Artikel Duplikate finden per Abfrage (www.access-basics.de/516) vorgestellt haben, gibt es auch noch einen Assistenten für die Inkonsistenzsuche.

Diesen finden Sie, wenn Sie im Ribbon auf den Befehl Er-stel-len|Abfragen|Abfrage-Assistent klicken und in dem dann erscheinenden Dialog Neue Abfrage den Eintrag Abfrage-Assistent zur Inkonsistenzsuche auswählen (siehe Bild 2).

Abfrage-Assistent zur Inkonsistenzsuche

Bild 2: Abfrage-Assistent zur Inkonsistenzsuche

Bereits der Beschreibungstext des Assistenten in diesem Dialog gibt uns jedoch einen Hinweis, dass der Assistent nicht das tut, was wir gern hätten: Er dient nämlich dazu, Inkonsistenzen bei verknüpften Datensätzen aufzuspüren. Wir wollen aber Inkonsistenzen innerhalb einer einzigen Tabelle identifizieren. Daher verschieben wir die Beschreibung dieses sehr nützlichen Assistenten in einen anderen Artikel namens Inkonsistente Verknüpfungen finden (www.access-basics.de/518).

Abfrage zum Suchen von Inkonsistenzen innerhalb einer Tabelle auffinden

Da wir die Abfrage nun selbst entwerfen müssen, wollen wir zunächst einmal definieren, welche Datensätze wir finden wollen. Wir gehen also davon aus, dass es in unserer Beispieltabelle tblBestellungen ein sogenanntes Nichtschlüsselfeld gibt, hier KundeID, sowie einige weitere Felder, die von diesem Nichtschlüsselfeld abhängig sind – in unserem Fall Firma und Ansprechpartner. In einem ausführlicheren Beispiel könnten auch noch die Adresse und weitere Daten dazugehören.

Grundsätzlich möchten wir alle Datensätze herausfinden, die zwar den gleichen Wert im Feld KundeID aufweisen, aber deren davon abhängige Felder Firma oder Ansprechpartner nicht übereinstimmen. “Oder” deshalb, weil es laut unseren Anforderungen für eine Inkonsistenz reicht, dass nur eines der von KundeID abhängigen Felder nicht in allen Datensätzen mit dieser Kundennummer gleich ist.

Wir brauchen also erst einmal nur solche Datensätze zu untersuchen, von denen es mindestens zwei mit dem gleichen Wert im Feld KundeID gibt.

An dieser Stelle können wir den Abfrage-Assistent zur Duplikatsuche nutzen und diesem den Auftrag geben, eine Abfrage zu erstellen, die alle Werte im Feld KundeID ausgibt, die mehrmals auftreten. Dieser liefert uns eine Abfrage, die im Entwurf wie in Bild 3 aussieht.

Abfrage zum Finden von doppelten Werten im Feld KundeID

Bild 3: Abfrage zum Finden von doppelten Werten im Feld KundeID

Diese ermittelt Datensätze, die erstens den Wert des Feldes KundeID enthält und zweitens die Anzahl der Datensätze, die den gleichen Wert im Feld Kunde-ID enthalten.

Hier haben wir zwei Kunden beziehungsweise Werte für das Feld KundeID gefunden, die mehr als einmal vorkommen. Die Abfrage speichern wir unter dem Namen qryKundenMitMehrAlsEinerBestellung (siehe Bild 4). Schauen wir noch einmal in die Tabelle tblBestellungen, sehen wir, dass der Kunde mit dem Wert 1 im Feld KundeID doppelt vorkommt und eine Inkonsistenz im Feld Firma enthält. Der Kunde mit dem Wert 2 im Feld KundeID kommt auch zwei Mal vor, aber ohne Inkonsistenzen. Das heißt, die den Kunden betreffenden Daten sind in den beiden Datensätzen identisch (siehe Bild 5).

Doppelte Werte im Feld KundeID

Bild 4: Doppelte Werte im Feld KundeID

Zu untersuchende Datensätze

Bild 5: Zu untersuchende Datensätze

Damit haben wir aber nur den ersten Teil des gesuchten Ergebnisses. Für den zweiten Teil gilt es herauszufinden, für welche der mit der ersten Abfrage gefundenen Datensätze wir mehr als einen unterschiedlichen Datensatz finden.

Das gehen wir in Zwischenschritten an:

  • Im ersten Zwischenschritt erstellen wir eine Abfrage, die untersucht, welche Varianten von jedem der gefundenen Datensätze es gibt.
  • Im zweiten Schritt finden wir aus dieser Abfrage die Datensätze für die Werte von KundeID, die mehr als einmal vorkommen.

Verschiedene Varianten für Duplikate suchen

Der erste Schritt ist die Abfrage qryEindeutigeKundenAusDuplikaten, deren Entwurf Sie in Bild 6 finden.

Eindeutige Kunden aus den Duplikaten finden

Bild 6: Eindeutige Kunden aus den Duplikaten finden

Dieser Abfrage fügen Sie als Erstes die Tabelle tblBestellungen hinzu. Danach ziehen Sie auch noch die soeben erstellte Abfrage qryKundenMitMehrAlsEinerBestellung hinzu. Die beiden Datenquellen verbinden Sie über das Feld KundeID. Dazu ziehen Sie beispielsweise das Feld KundeID aus der Tabelle tblBestellungen auf das Feld KundeID_Duplikate der Abfrage qryKundenMitMehrAlsEinerBestellung.

Dadurch sorgen wir dafür, dass nur Datensätze mit solchen Werten im Feld KundeID aus der Tabelle tblBestellungen geliefert werden, die wir mit der Abfrage qryKundenMitMehrAlsEinerBestellung bereits als Duplikate identifiziert haben.

Wenn wir nun in die Datenblattansicht wechseln, erhalten wir erst einmal alle Datensätze, deren Wert im Feld KundeID mehr als einmal in der Tabelle tblBestellungen vorkommt (siehe Bild 7). Hier taucht korrekterweise auch der Datensatz mit dem Wert 2 im Feld KundeID zwei Mal auf.

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