Duplikate in Access Tabellen löschen
Trotz aller Sorgfalt passiert es auch in professionell angelegten Access Datenbanken immer wieder, dass Datensätze doppelt eingetragen werden. In Microsoft Access gibt es schon lange die Möglichkeit, diese doppelten Datensätze ganz bequem über den Abfrage-Assistenten zur Duplikatsuche aufzuspüren. Was aber muss ich tun, um die überzähligen Einträge aus meiner Datenbank zu löschen? Genau das zeigen wir dir in diesem Beitrag. Weitere Access Grundlagen zeigen wir dir in unserer Access Basics Schulung.
Hinweis:
Das Beispiel dient zur Verdeutlichung der Vorgehensweise. Am Ende des Beitrags findest du eine Erklärung, was du tun musst, um die hier vorgestellte Lösung auf eine Access Tabelle in deiner Datenbank anzuwenden.
WICHTIG!
Arbeite NIE an deinen Access-Originaldaten. Erstelle dir zu Testzwecken immer eine Sicherheitskopie der Tabelle. Hierzu schließt du zuerst die Tabelle, falls sie geöffnet ist. Wähle die Tabelle nun im Navigationsbereich per Rechtsklick aus und kopiere sie. Klicke nun nochmals mit der rechten Maustaste in den Navigationsbereich und wähle den Eintrag Einfügen. Es erscheint ein Dialogfenster in Access, welches du mit OK bestätigst. Vorher kannst du bei Bedarf den Namen der Sicherheitskopie deiner Tabelle ändern. Achte besonders darauf, dass die Einstellung Struktur und Daten ausgewählt ist.
Die Access-Beispieltabelle
Um den Lösungsweg zu verdeutlichen, verwenden wir eine einfache Access-Tabelle.
In dieser Tabelle ist die Kundennummer der Primärschlüssel. Allerdings haben sich hier einige Kunden mehrfach eingeschlichen. Die Angaben zu den Kundennummern 1 und 11252, 2 und 8968, 3 und 15067 sowie 2169 und 2297 sind identisch.
Duplikate in MS Access finden
Mit Hilfe des Abfrage-Assistenten zur Duplikatsuche kann man diese doppelten Datensätze recht einfach ermitteln.
Hierzu wähle im Register Erstellen die Schaltfläche Abfrage-Assistent.
Im Dialogfenster Neue Abfrage wählst du den Eintrag Abfrage-Assistent zur Duplikatsuche.
Die Basis für unsere Duplikatsuche ist die Tabelle tbl_Kunden.
Wir gehen bei der Abfrage davon aus, dass es sich bei allen Datensätzen, bei denen die Felder KundeVorname, KundeName und KundeGebDat identisch sind, um Duplikate handelt. Also fügen wir diese Felder in unsere Abfrage ein.
Im nächsten Fenster können wir noch zusätzliche Felder auswählen, die im Abfrageergebnis angezeigt werden sollen. Diese Felder werden nicht zur Ermittlung der Duplikate herangezogen. Wir wählen hier das Feld Kundennummer aus.
Im letzten Schritt des Assistenten vergibst du einen Namen für die Abfrage (hier qry_Duplikate_tbl_Kunden).
Nachdem du auf Fertigstellen geklickt hast, sollte folgendes Ergebnis angezeigt werden:
In der Entwurfsansicht der Abfrage findet sich in der Kriterienzeile ein Eintrag, der in dieser Ansicht allerdings schlecht zu lesen ist.
Wechsele über die Schaltfläche Ansicht in die SQL-Ansicht der Abfrage.
Du siehst nun das SQL-Statement zu deiner Abfrage.
[code language=”sql”]SELECT tbl_Kunden.[KundeVorname], tbl_Kunden.[KundeName], tbl_Kunden.[KundeGebDat], tbl_Kunden.[Kundennummer]
FROM tbl_Kunden</em>
WHERE (((tbl_Kunden.[KundeVorname]) In (SELECT [KundeVorname] FROM [tbl_Kunden] As Tmp GROUP BY [KundeVorname],[KundeName],[KundeGebDat] HAVING Count(*)>1 And [KundeName] = [tbl_Kunden].[KundeName] And [KundeGebDat] = [tbl_Kunden].[KundeGebDat])))
ORDER BY tbl_Kunden.[KundeVorname], tbl_Kunden.[KundeName], tbl_Kunden.[KundeGebDat];[/code]
Ohne ins Detail zu gehen, hier eine kurze Erläuterung:
Die SELECT-Anweisung legt fest, welche Felder verwendet werden. Die FROM-Anweisung besagt, welche Tabelle der Abfrage zugrunde liegt. In der WHERE-Klausel werden die Kriterien für die Abfrage festgelegt und die abschließende ORDER BY-Zeile legt die Sortierung der Abfrage fest.
Duplikate vereinzeln
Jetzt fehlen nur noch die letzten Schritte, um die überzähligen Datensätze zu löschen. Hierzu benötigen wir ein weiteres SQL-Statement:
[code language=”sql”]IN (SELECT Min(tbl_Kunden.Kundennummer) AS MinVonKundennummer FROM tbl_Kunden GROUP BY tbl_Kunden.KundeVorname, tbl_Kunden.KundeName, tbl_Kunden.KundeGebDat HAVING (((Count(tbl_Kunden.KundeVorname))>1) AND ((Count(tbl_Kunden.KundeName))>1) AND ((Count(tbl_Kunden.KundeGebDat))>1)))[/code]
Kopiere einfach den Text und füge diesen in die Kriterienzeile der Kundennummer ein.
Wenn du nun in die Datenblattansicht wechselst, erscheint dort tatsächlich nur noch ein Eintrag für jedes Duplikat.
Löschabfrage in Access erstellen
Wenn bis hierhin alles funktioniert hat, bleibt nur noch eine Änderung, die an der Abfrage gemacht werden muss.
In diesem letzten Schritt musst du die Abfrage in eine Löschabfrage umwandeln. Hierzu öffne die Abfrage in der Entwurfsansicht und klicke im Register Entwurf der Abfragetools auf die Schaltfläche Löschen.
Speichere die Abfrage und führe sie über die Schaltfläche Ausführen aus. Als Resultat erhältst du diese Meldung:
Wenn diese Meldung mit OK bestätigt wird, werden die vorher angezeigten Datensätze gelöscht.
Hinweis
In diesem Beispiel wurde davon ausgegangen, dass es zu jedem Datensatz maximal ein Duplikat gibt. Sollten in deiner Datenbank mehrere Duplikate zu einem Datensatz vorhanden sein, führe die Löschabfrage einfach so oft aus, bis die Meldung besagt, dass 0 Zeilen aus der Tabelle löschen werden.
Löschabfrage auf eigene Tabelle anpassen
Bis zum Abschnitt Duplikate finden brauchst du keine Änderungen vorzunehmen, da hier alles vom Assistenten zur Duplikatsuche erstellt wird. Änderungen sind erst beim SQL-Statement im Abschnitt Duplikate vereinzeln nötig.
Hier noch einmal das SQL-Statement, etwas übersichtlicher dargestellt:
IN (SELECT Min(tbl_Kunden.Kundennummer)
AS MinVonKundennummer FROM tbl_Kunden
GROUP BY tbl_Kunden.KundeVorname, tbl_Kunden.KundeName, tbl_Kunden.KundeGebDat HAVING (((Count(tbl_Kunden.KundeVorname))>1)
AND ((Count(tbl_Kunden.KundeName))>1)
AND ((Count(tbl_Kunden.KundeGebDat))>1)))
Wie deutlich zu erkennen ist, handelt es sich bei den rot markierten Einträgen um den Namen der verwendeten Tabelle. Die grünen Begriffe stellen die verwendeten Felder für die Duplikatsuche dar.
Um die Abfrage auf deine Tabelle anzupassen, ersetze den hier verwendeten roten Tabellennamen durch den Namen deiner Tabelle. Ebenso verfährst du mit den grünen Feldnamen.
Achte unbedingt darauf, dass du
- keine Klammern oder Punkte löschst
- die exakte Schreibweise des Tabellennamens und der Feldnamen verwendest
In dem Beispiel wurde jeweils das Duplikat mit der niedrigeren Kundennummer gelöscht. Dies wird durch die Funktion Min in der ersten Zeile des SQL-Textes erreicht. Möchtest du, dass die Duplikate mit der höheren Kundennummer gelöscht werden, so ersetze einfach den Begriff Min durch den Begriff Max.
Die zweite Zeile des SQL-Statements legt ein sog. Alias für deine Tabelle an. Der Begriff MinVonKundennummer ist hier unwesentlich. Hier kann ein beliebiger Name gewählt werden – unabhängig davon, ob du die Funktion Max oder Min verwendest.
Kontakt
„*“ zeigt erforderliche Felder an