BlogDuplikate in Access Tabellen löschen

Duplikate in Access Tabellen löschen

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 müssen, um die hier vorgestellte Lösung auf eine Access Tabelle in deiner Datenbank anzuwenden.

WICHTIG!

Arbeite NIE an Ihren 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.

Kopie einer Tabelle erstellen
Kopie einer Tabelle erstellen

Die Access-Beispieltabelle

Um den Lösungsweg zu verdeutlichen, verwenden wir eine einfache Access-Tabelle.

Die Beispieltabelle
Die Beispieltabelle

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ählen Sie im Register Erstellen die Schaltfläche Abfrage-Assistent.

Den Abfrageassistenten starten
Den Abfrageassistenten starten

Im Dialogfenster Neue Abfrage wählen Sie den Eintrag Abfrage-Assistent zur Duplikatsuche.

Schritt 1 im Abfrageassistenten
Schritt 1 im Abfrageassistenten

Die Basis für unsere Duplikatsuche ist die Tabelle tbl_Kunden.

Schritt 2 im Abfrageassistenten
Schritt 2 im Abfrageassistenten

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.

Schritt 3 im Abfrageassistenten
Schritt 3 im Abfrageassistenten

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.

Schritt 4 im Abfrageassitenten
Schritt 4 im Abfrageassistenten

Im letzten Schritt des Assistenten vergibst du einen Namen für die Abfrage (hier qry_Duplikate_tbl_Kunden).

Schritt 5 im Abfrageassistenten
Schritt 5 im Abfrageassistenten

Nachdem du auf Fertigstellen geklickt hast, sollte folgendes Ergebnis angezeigt werden:

Die Duplikate
Die Duplikate

In der Entwurfsansicht der Abfrage findet sich in der Kriterienzeile ein Eintrag, der in dieser Ansicht allerdings schlecht zu lesen ist.

Entwurfsansicht der Duplikatsuche
Entwurfsansicht der Duplikatsuche

Wechsele über die Schaltfläche Ansicht in die SQL-Ansicht der Abfrage.

Wechsel zur SQL-Ansicht
Wechsel zur SQL-Ansicht

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.

Entwurfsansicht mit zusätzlichem SQL-Code
Entwurfsansicht mit zusätzlichem SQL-Code

Wenn du nun in die Datenblattansicht wechselst, erscheint dort tatsächlich nur noch ein Eintrag für jedes Duplikat.

Vereinzelte Duplikate
Vereinzelte Duplikate

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 öffnest die Abfrage in der Entwurfsansicht und klickst im Register Entwurf der Abfragetools auf die Schaltfläche Löschen.

Abfrae in Löschabfrage umwandeln
Abfrage in Löschabfrage umwandeln

Speichere die Abfrage und führe sie über die Schaltfläche Ausführen aus. Als Resultat erhältst du diese Meldung:

Meldung nach ausführen der Löschabfrage
Meldung nach dem Ausführen der Löschabfrage

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 Ihre 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 Ihre 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.

Bildnachweis: Titelbild: © iava777 – Fotolia.com 

Schulungen die dich interessieren könnten

Bewertungen

Kundenstimme
Lucas F.
Fa. Feld Textil GmbH
star-participantstar-participantstar-participantstar-participantstar-participant
Kann man nur weiterempfehlen! In kürzestem Zeitraum lernt man alle Basisdaten konkret und ausführlich.
Kundenstimme
Thomas M.
Aldi GmbH & Co. KG
star-participantstar-participantstar-participantstar-participantstar-participant
Lernen in einem sehr entspannten und angenehmen Klima. Prima!
Kundenstimme
Philipp M.
Wacom Europe GmbH
star-participantstar-participantstar-participantstar-participantstar-participant
Sehr gute Organisation, guter Trainer - alles super!
Kundenstimme
Nina P.
GEUTEBRÜCK GmbH
star-participantstar-participantstar-participantstar-participantstar-participant
Das Seminar hat meine Erwartungen voll erfüllt. Man hat gemerkt, dass der Trainer Spaß an der Sache und sehr viel Ahnung vom Thema hat. Das Gefühl hat man nicht in allen Schulungen (auf Schulungen im Allgemeinen bezogen).