{"id":55000513,"date":"2021-02-01T00:00:00","date_gmt":"2021-02-01T00:00:00","guid":{"rendered":"http:\/\/access-basics.de\/513"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-30T00:00:00","slug":"Inkonsistente_Duplikate_finden_per_Abfrage","status":"publish","type":"post","link":"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html","title":{"rendered":"Inkonsistente Duplikate finden per Abfrage"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/vg08.met.vgwort.de\/na\/035920f3d08743f389e86a767f00ac46\" width=\"1\" height=\"1\" alt=\"\"><\/p>\n<p class='introduction'>Wenn Sie ein Datenmodell antreffen, das nicht vollst&auml;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.<\/p>\n<h2>Beispieldatenbank zum Finden von inkonsistenten Daten<\/h2>\n<p>Die Beispiele dieses Artikels finden Sie in der Datenbank <b>2101_InkonsistenteDaten.accdb<\/b>.<\/p>\n<h2>Beispiel f&uuml;r inkonsistente Daten<\/h2>\n<p>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 &uuml;brigen Kundendaten in der Bestellungen-Tabelle. <\/p>\n<p>Ein Beispiel f&uuml;r inkonsistente Daten finden Sie in der Tabelle aus Bild 1. Hier finden wir zwei Mal den Kunden mit dem Wert <b>1 <\/b>im Feld <b>KundeID<\/b>.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_001.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_001.png\" alt=\"Inkonsistente Daten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 1: Inkonsistente Daten<\/p>\n<p>Dabei taucht auch gleich eine Inkonsistent auf: Der Firmenname des Kunden erscheint einmal mit <b>Minhorst <\/b>und einmal mit <b>Mienhorst<\/b>. Solche Inkonsistenzen k&ouml;nnen aus verschiedenen Gr&uuml;nden entstehen, zum Beispiel <\/p>\n<ul>\n<li>weil die Bestellannahme den Kundennamen einmal falsch und dann bei der n&auml;chsten Bestellung richtig eingetragen hat,<\/li>\n<li>weil der Kunde selbst sich bei einer Onlinebestellung vertippt hat oder<\/li>\n<li>weil sich die Adresse von einer Bestellung zur n&auml;chsten ge&auml;ndert hat &#8211; dann pr&uuml;ft und &auml;ndert man bei der Aufnahme einer neuen Bestellung eventuell nicht die zuvor verwendeten Daten.<\/li>\n<\/ul>\n<p>Sie k&ouml;nnten einwenden, dass es ja sinnvoll ist, die Adresse des Kunden mit jeder Bestellung zu speichern, um sp&auml;ter nachvollziehen zu k&ouml;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.<\/p>\n<h2>Inkonsistente Daten per Assistent finden<\/h2>\n<p>Neben dem Assistenten f&uuml;r die Duplikatsuche, den wir im Artikel <b>Duplikate finden per Abfrage <\/b>(<b>www.access-basics.de\/516<\/b>) vorgestellt haben, gibt es auch noch einen Assistenten f&uuml;r die Inkonsistenzsuche.<\/p>\n<p>Diesen finden Sie, wenn Sie im Ribbon auf den Befehl <b>Er-stel-len|Abfragen|Abfrage-Assistent <\/b>klicken und in dem dann erscheinenden Dialog <b>Neue Abfrage <\/b>den Eintrag <b>Abfrage-Assistent zur Inkonsistenzsuche <\/b>ausw&auml;hlen (siehe Bild 2).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_004.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_004.png\" alt=\"Abfrage-Assistent zur Inkonsistenzsuche\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 2: Abfrage-Assistent zur Inkonsistenzsuche<\/p>\n<p>Bereits der Beschreibungstext des Assistenten in diesem Dialog gibt uns jedoch einen Hinweis, dass der Assistent nicht das tut, was wir gern h&auml;tten: Er dient n&auml;mlich dazu, Inkonsistenzen bei verkn&uuml;pften Datens&auml;tzen aufzusp&uuml;ren. Wir wollen aber Inkonsistenzen innerhalb einer einzigen Tabelle identifizieren. Daher verschieben wir die Beschreibung dieses sehr n&uuml;tzlichen Assistenten in einen anderen Artikel namens <b>Inkonsistente Verkn&uuml;pfungen finden <\/b>(<b>www.access-basics.de\/518<\/b>).<\/p>\n<h2>Abfrage zum Suchen von Inkonsistenzen innerhalb einer Tabelle auffinden<\/h2>\n<p>Da wir die Abfrage nun selbst entwerfen m&uuml;ssen, wollen wir zun&auml;chst einmal definieren, welche Datens&auml;tze wir finden wollen. Wir gehen also davon aus, dass es in unserer Beispieltabelle <b>tblBestellungen <\/b>ein sogenanntes Nichtschl&uuml;sselfeld gibt, hier <b>KundeID<\/b>, sowie einige weitere Felder, die von diesem Nichtschl&uuml;sselfeld abh&auml;ngig sind &#8211; in unserem Fall <b>Firma<\/b> und <b>Ansprechpartner<\/b>. In einem ausf&uuml;hrlicheren Beispiel k&ouml;nnten auch noch die Adresse und weitere Daten dazugeh&ouml;ren.<\/p>\n<p>Grunds&auml;tzlich m&ouml;chten wir alle Datens&auml;tze herausfinden, die zwar den gleichen Wert im Feld <b>KundeID <\/b>aufweisen, aber deren davon abh&auml;ngige Felder <b>Firma<\/b> oder <b>Ansprechpartner <\/b>nicht &uuml;bereinstimmen. &#8222;Oder&#8220; deshalb, weil es laut unseren Anforderungen f&uuml;r eine Inkonsistenz reicht, dass nur eines der von <b>KundeID <\/b>abh&auml;ngigen Felder nicht in allen Datens&auml;tzen mit dieser Kundennummer gleich ist.<\/p>\n<p>Wir brauchen also erst einmal nur solche Datens&auml;tze zu untersuchen, von denen es mindestens zwei mit dem gleichen Wert im Feld <b>KundeID <\/b>gibt.<\/p>\n<p>An dieser Stelle k&ouml;nnen wir den <b>Abfrage-Assistent zur Duplikatsuche <\/b>nutzen und diesem den Auftrag geben, eine Abfrage zu erstellen, die alle Werte im Feld <b>KundeID<\/b> ausgibt, die mehrmals auftreten. Dieser liefert uns eine Abfrage, die im Entwurf wie in Bild 3 aussieht.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_005.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_005.png\" alt=\"Abfrage zum Finden von doppelten Werten im Feld KundeID\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 3: Abfrage zum Finden von doppelten Werten im Feld KundeID<\/p>\n<p>Diese ermittelt Datens&auml;tze, die erstens den Wert des Feldes <b>KundeID <\/b>enth&auml;lt und zweitens die Anzahl der Datens&auml;tze, die den gleichen Wert im Feld <b>Kunde-ID <\/b>enthalten. <\/p>\n<p>Hier haben wir zwei Kunden beziehungsweise Werte f&uuml;r das Feld <b>KundeID <\/b>gefunden, die mehr als einmal vorkommen. Die Abfrage speichern wir unter dem Namen <b>qryKundenMitMehrAlsEinerBestellung<\/b> (siehe Bild 4). Schauen wir noch einmal in die Tabelle <b>tblBestellungen<\/b>, sehen wir, dass der Kunde mit dem Wert <b>1 <\/b>im Feld <b>KundeID <\/b>doppelt vorkommt und eine Inkonsistenz im Feld <b>Firma <\/b>enth&auml;lt. Der Kunde mit dem Wert <b>2 <\/b>im Feld <b>KundeID <\/b>kommt auch zwei Mal vor, aber ohne Inkonsistenzen. Das hei&szlig;t, die den Kunden betreffenden Daten sind in den beiden Datens&auml;tzen identisch (siehe Bild 5).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_006.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_006.png\" alt=\"Doppelte Werte im Feld KundeID\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 4: Doppelte Werte im Feld KundeID<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_007.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_007.png\" alt=\"Zu untersuchende Datens&auml;tze\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 5: Zu untersuchende Datens&auml;tze<\/p>\n<p>Damit haben wir aber nur den ersten Teil des gesuchten Ergebnisses. F&uuml;r den zweiten Teil gilt es herauszufinden, f&uuml;r welche der mit der ersten Abfrage gefundenen Datens&auml;tze wir mehr als einen unterschiedlichen Datensatz finden.<\/p>\n<p>Das gehen wir in Zwischenschritten an:<\/p>\n<ul>\n<li>Im ersten Zwischenschritt erstellen wir eine Abfrage, die untersucht, welche Varianten von jedem der gefundenen Datens&auml;tze es gibt. <\/li>\n<li>Im zweiten Schritt finden wir aus dieser Abfrage die Datens&auml;tze f&uuml;r die Werte von KundeID, die mehr als einmal vorkommen.<\/li>\n<\/ul>\n<h2>Verschiedene Varianten f&uuml;r Duplikate suchen<\/h2>\n<p>Der erste Schritt ist die Abfrage <b>qryEindeutigeKundenAusDuplikaten<\/b>, deren Entwurf Sie in Bild 6 finden.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_008.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_008.png\" alt=\"Eindeutige Kunden aus den Duplikaten finden\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 6: Eindeutige Kunden aus den Duplikaten finden<\/p>\n<p>Dieser Abfrage f&uuml;gen Sie als Erstes die Tabelle <b>tblBestellungen <\/b>hinzu. Danach ziehen Sie auch noch die soeben erstellte Abfrage <b>qryKundenMitMehrAlsEinerBestellung <\/b>hinzu. Die beiden Datenquellen verbinden Sie &uuml;ber das Feld <b>KundeID<\/b>. Dazu ziehen Sie beispielsweise das Feld <b>KundeID <\/b>aus der Tabelle <b>tblBestellungen <\/b>auf das Feld <b>KundeID_Duplikate <\/b>der Abfrage <b>qryKundenMitMehrAlsEinerBestellung<\/b>.<\/p>\n<p>Dadurch sorgen wir daf&uuml;r, dass nur Datens&auml;tze mit solchen Werten im Feld <b>KundeID <\/b>aus der Tabelle <b>tblBestellungen <\/b>geliefert werden, die wir mit der Abfrage <b>qryKundenMitMehrAlsEinerBestellung <\/b>bereits als Duplikate identifiziert haben.<\/p>\n<p>Wenn wir nun in die Datenblattansicht wechseln, erhalten wir erst einmal alle Datens&auml;tze, deren Wert im Feld <b>KundeID <\/b>mehr als einmal in der Tabelle <b>tblBestellungen <\/b>vorkommt (siehe Bild 7). Hier taucht korrekterweise auch der Datensatz mit dem Wert <b>2 <\/b>im Feld <b>KundeID <\/b>zwei Mal auf.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_009.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_009.png\" alt=\"Erstes Ergebnis von qryEindeutigeKundenAusDuplikaten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 7: Erstes Ergebnis von qryEindeutigeKundenAusDuplikaten<\/p>\n<p>Damit dieser nur einmal auftaucht, stellen wir anschlie&szlig;end die Eigenschaft <b>Keine Duplikate <\/b>auf <b>Ja <\/b>ein. Damit deaktivieren wir die mehrfache Anzeige von Datens&auml;tzen, die in allen im Entwurfsraster enthaltenen Feldern identisch sind.<\/p>\n<p>Von den Datens&auml;tzen mit dem Wert <b>2 <\/b>im Feld <b>KundeID <\/b>wird demzufolge nun nur noch ein Exemplar angezeigt (siehe Bild 8), w&auml;hrend die beiden verschiedenen Version des Kunden mit dem Wert <b>1 <\/b>im Feld <b>KundeID <\/b>noch erscheinen.<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_010.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_010.png\" alt=\"qryEindeutigeKundenAusDuplikaten nur mit eindeutigen Datens&auml;tzen\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 8: qryEindeutigeKundenAusDuplikaten nur mit eindeutigen Datens&auml;tzen<\/p>\n<p>Nun folgt noch der dritte Schritt: Wir m&uuml;ssen diejenigen Datens&auml;tze aus dem Ergebnis entfernen, die nur eindeutige Daten enthalten. In diesem Fall handelt es sich um den Datensatz mit dem Wert <b>2 <\/b>im Feld <b>KundeID<\/b>. &Uuml;brig bleiben sollen also nur die beiden Datens&auml;tze, in denen das Feld <b>KundeID <\/b>den Wert <b>1 <\/b>aufweist.<\/p>\n<h2>KundeID f&uuml;r mehrfach vorkommende, inkonsistente Datens&auml;tze ermitteln<\/h2>\n<p>Das erledigen wir in einer weiteren Abfrage, die diesmal nur auf der Abfrage <b>qryEindeutigeKundenAusDuplikaten <\/b>aufsetzt und aus dieser nur die Werte f&uuml;r das Feld <b>KundeID <\/b>ermitteln soll, die in der Abfrage <b>qryEindeutigeKundenAusDuplikaten <\/b>mehrfach vorkommen.<\/p>\n<p>Also erstellen wir eine Abfrage, der wir nur die Abfrage <b>qryEindeutigeKundenAusDuplikaten <\/b>hinzuf&uuml;gen. Aus dieser ziehen wir zwei Mal das Feld <b>KundeID <\/b>in das Entwurfsraster. Mit einem Klick auf den Ribbon-Befehl <b>Entwurf|Einblenden\/Ausblenden|Summen <\/b>blenden wir die Zeile <b>Funktion <\/b>im Entwurfsraster der Abfrage ein. Dann stellen wir f&uuml;r das erste Feld in der Zeile <b>Funktion <\/b>den Wert <b>Gruppierung <\/b>ein und f&uuml;r das zweite Feld den Wert <b>Anzahl<\/b>. F&uuml;r das zweite Feld legen wir au&szlig;erdem als Kriterium den Wert <b>>1 <\/b>fest.<\/p>\n<p>Damit erreichen wir, dass die Abfrage nach dem Wert <b>KundeID <\/b>gruppiert und in der zweiten Spalte die Anzahl der Datens&auml;tze je Gruppe ermittelt. Diese filtern wir so, dass nur diejenigen <b>KundeID<\/b>-Werte im Ergebnis erscheinen, die mehr als einmal in der Abfrage <b>qryEindeutigeKundenAusDuplikaten <\/b>vorkommen (siehe Bild 9).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_011.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_011.png\" alt=\"Alle Datens&auml;tze aus qryEindeutigeKundenAusDuplikaten, f&uuml;r die es mehrere Exemplare je KundeID gibt\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 9: Alle Datens&auml;tze aus qryEindeutigeKundenAusDuplikaten, f&uuml;r die es mehrere Exemplare je KundeID gibt<\/p>\n<p>Nachdem wir die neue Abfrage unter dem Namen <b>qryEindeutigeKundenAusDuplikatenMehrereJeKundeID <\/b>gespeichert haben, zeigen wir diese in der Datenblattansicht an. Als Ergebnis erhalten wir, dass der Kunde mit dem Wert <b>1 <\/b>im Feld <b>KundeID <\/b>der einzige ist, f&uuml;r den mehrere Datens&auml;tze mit inkonsistenten Daten vorliegen (siehe Bild 10).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_012.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_012.png\" alt=\"Ausgabe aller Werte des Feldes KundeID, f&uuml;r die es inkonsistente Datens&auml;tze gibt.\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 10: Ausgabe aller Werte des Feldes KundeID, f&uuml;r die es inkonsistente Datens&auml;tze gibt.<\/p>\n<p>Wenn wir nun alle inkonsistenten Datens&auml;tze anzeigen wollen, brauchen wir nur noch eine letzte Abfrage, welche die Abfrage <b>qryEindeutigeKundenAusDuplikatenMehrereJeKundeID<\/b> nutzt.<\/p>\n<h2>Ausgeben der Datens&auml;tze mit inkonsistenten Kundendaten<\/h2>\n<p>Im letzten Schritt erstellen wir also eine weitere Abfrage. Dieser f&uuml;gen wir als Datenquelle die Tabelle <b>tblBestellungen <\/b>und die Abfrage <b>qryEindeutigeKundenAusDuplikatenMehrereJeKundeID<\/b> hinzu. Dann verkn&uuml;pfen wir wieder das Feld <b>KundeID <\/b>der Tabelle <b>tblBestellungen <\/b>mit dem der Abfrage <b>qryEindeutigeKundenAusDuplikatenMehrereJeKundeID<\/b>. Dazu ziehen Sie das Feld <b>KundeID <\/b>von der einen auf das gleichnamige Feld der anderen Datenquelle.<\/p>\n<p>Anschlie&szlig;end ziehen Sie alle Felder der Tabelle <b>tblBestellungen <\/b>in das Entwurfsraster der Abfrage. Damit ist die Abfrage bereits fertiggestellt &#8211; die Verkn&uuml;pfung der beiden <b>KundeID<\/b>-Felder ist quasi das Kriterium, das daf&uuml;r sorgt, dass nur die Datens&auml;tze der Tabelle <b>tblBestellungen <\/b>angezeigt werden, die inkonsistente Datens&auml;tze in den Feldern <b>KundeID<\/b>, <b>Firma <\/b>und <b>Ansprechpartner <\/b>enthalten (siehe Bild 11).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_013.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_013.png\" alt=\"Abfrage zur Ermittlung aller Bestellungen, deren Kundendaten inkonsistent sind\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 11: Abfrage zur Ermittlung aller Bestellungen, deren Kundendaten inkonsistent sind<\/p>\n<p>Diese Abfrage speichern wir unter dem Namen <b>qryInkonsistenteKundenInBestellungen <\/b>und wechseln dann in die Datenblattansicht. Das Ergebnis zeigt genau die beiden Datens&auml;tze mit dem Wert <b>1 <\/b>im Feld <b>KundeID <\/b>an, die inkonsistente Daten enthalten (siehe Bild 12).<\/p>\n<p class=\"image\"><a rel=\"lightbox\" href=\"..\/tl_files\/images\/pic_513_014.png\"><img decoding=\"async\" src=\"..\/tl_files\/images\/pic_513_014.png\" alt=\"Ergebnis mit den inkonsistente Daten\" width=\"325\" \/><\/a><\/p>\n<p class='imagetext'>Bild 12: Ergebnis mit den inkonsistente Daten<\/p>\n<h2>Mehrere inkonsistente Datens&auml;tze<\/h2>\n<p>Wenn die Tabelle <b>tblBestellungen <\/b>mehrere Datens&auml;tze mit dem gleichen Wert im Feld <b>KundeID <\/b>enth&auml;lt, von denen nur einer von den anderen abweicht oder von denen auch alle Unterschiede in den Feldern <b>Firma <\/b>oder <b>Ansprechpartner <\/b>aufweisen, werden immer alle betroffenen Datens&auml;tze angezeigt.<\/p>\n<p>Nur so kann der Bearbeiter entscheiden, welche der Datens&auml;tze angepasst werden sollen und welcher der Datensatz ist, dessen Daten &uuml;bernommen werden sollen.<\/p>\n<h2>Zusammenfassung und Ausblick<\/h2>\n<p>Dieser Artikel zeigt, wie man Inkonsistenzen aufdeckt und diese mit verschiedenen, aufeinander aufbauenden Abfragen anzeigen kann.<\/p>\n<p>Damit ist die Basis gelegt, mit welcher der Benutzer die inkonsistenten Daten ermitteln kann. Damit ist es wesentlich einfacher also zuvor, die doppelten und inkonsistenten Daten anzuzeigen und diese dann zu bearbeiten.<\/p>\n<p>Dadurch, dass die Abfrage <b>qryInkonsistenteKundenInBestellungen <\/b>nur Felder aus der Tabelle <b>tblBestellungen <\/b>anzeigt, ist diese sogar aktualisierbar. Das hei&szlig;t, der Benutzer kann die Inkonsistenzen direkt in dieser Abfrage korrigieren. Hat er die Kundendaten eines Datensatzes an einen anderen angeglichen und existieren somit keine Inkonsistenzen mehr f&uuml;r diesen Datensatz, kann er die noch angezeigten Daten mit diesem Wert im Feld <b>KundeID <\/b>durch Aktualisieren der Abfrage mit <b>F5 <\/b>ausblenden.<\/p>\n<p>Spannend w&auml;re es noch, ein Formular zu entwickeln, mit dem der Benutzer nur noch den Datensatz f&uuml;r eine Menge von inkonsistenten Datens&auml;tzen ausw&auml;hlen m&uuml;sste und dann per Mausklick die Kundendaten dieses Datensatzes auf die &uuml;brigen Datens&auml;tze mit dem gleichen Wert im Feld <b>KundeID <\/b>&uuml;bertr&auml;gt.<\/p>\n<p>Das Beheben von Inkonsistenzen in einem Fall wie dem aus unserem Beispiel ist allerdings nur ein Zwischenschritt auf dem Weg zur Normalisierung des Datenmodells und hier speziell zum &Uuml;berf&uuml;hren des Datenmodells in die dritte Normalform. Wie das gelingt, erfahren Sie im Artikel <b>Normalisierung, Teil 3: Die dritte Normalform <\/b>(<b>www.access-basics.de\/512<\/b>).<\/p>\n<h3>Downloads zu diesem Beitrag<\/h3>\n<p>Enthaltene Beispieldateien:<\/p>\n<p>2101_InkonsistenteDaten.accdb<\/p>\n<p><a href=\"..\/Downloads\/Beispiele\/{8A9E2177-7E88-45CD-9AA2-2ACCC56799B4}\/InkonsistenteDatenFinden.zip\">Download<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Wenn Sie ein Datenmodell antreffen, das nicht vollst&auml;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.<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"om_disable_all_campaigns":false,"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_uf_show_specific_survey":0,"_uf_disable_surveys":false,"footnotes":""},"categories":[66012021,662021,44000006],"tags":[],"class_list":["post-55000513","post","type-post","status-publish","format-standard","hentry","category-66012021","category-662021","category-Abfragen_fuer_die_Datenauswahl"],"aioseo_notices":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v15.9.2 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Inkonsistente Duplikate finden per Abfrage - Access [basics]<\/title>\n<link rel=\"canonical\" href=\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\" \/>\n<meta property=\"og:locale\" content=\"de_DE\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Inkonsistente Duplikate finden per Abfrage - Access [basics]\" \/>\n<meta property=\"og:description\" content=\"Wenn Sie ein Datenmodell antreffen, das nicht vollst&auml;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.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\" \/>\n<meta property=\"og:site_name\" content=\"Access [basics]\" \/>\n<meta property=\"article:published_time\" content=\"2021-02-01T00:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"-0001-11-30T00:00:00+00:00\" \/>\n<meta property=\"og:image\" content=\"http:\/\/..\/tl_files\/images\/pic_513_001.png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Gesch\u00e4tzte Lesezeit\">\n\t<meta name=\"twitter:data1\" content=\"10\u00a0Minuten\">\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebSite\",\"@id\":\"https:\/\/access-basics.de\/#website\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Access [basics]\",\"description\":\"DAS ACCESS-MAGAZIN F\\u00dcR ALLE, DIE VON 0 AUF 100 WOLLEN\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":\"https:\/\/access-basics.de\/?s={search_term_string}\",\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"de\"},{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html#primaryimage\",\"inLanguage\":\"de\",\"url\":\"http:\/\/vg08.met.vgwort.de\/na\/035920f3d08743f389e86a767f00ac46\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html#webpage\",\"url\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\",\"name\":\"Inkonsistente Duplikate finden per Abfrage - Access [basics]\",\"isPartOf\":{\"@id\":\"https:\/\/access-basics.de\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html#primaryimage\"},\"datePublished\":\"2021-02-01T00:00:00+00:00\",\"dateModified\":\"-0001-11-30T00:00:00+00:00\",\"author\":{\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\"},\"breadcrumb\":{\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html#breadcrumb\"},\"inLanguage\":\"de\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/\",\"url\":\"https:\/\/access-basics.de\/\",\"name\":\"Home\"}},{\"@type\":\"ListItem\",\"position\":2,\"item\":{\"@type\":\"WebPage\",\"@id\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\",\"url\":\"https:\/\/access-basics.de\/index.php\/Inkonsistente_Duplikate_finden_per_Abfrage.html\",\"name\":\"Inkonsistente Duplikate finden per Abfrage\"}}]},{\"@type\":\"Person\",\"@id\":\"https:\/\/access-basics.de\/#\/schema\/person\/13395c4bcd7d7963efe33be9c584d93f\",\"name\":\"Andr\\u00e9 Minhorst\",\"image\":{\"@type\":\"ImageObject\",\"@id\":\"https:\/\/access-basics.de\/#personlogo\",\"inLanguage\":\"de\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/1b9d010cf1716692cb9c34f21554e07d17d461acaea5b61b8cb21cbec678d48a?s=96&d=mm&r=g\",\"caption\":\"Andr\\u00e9 Minhorst\"}}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","_links":{"self":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/comments?post=55000513"}],"version-history":[{"count":0,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/posts\/55000513\/revisions"}],"wp:attachment":[{"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/media?parent=55000513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/categories?post=55000513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/access-basics.de\/index.php\/data\/wp\/v2\/tags?post=55000513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}