Doppelte Datensätze mit SQL finden

Lesezeit ca. 3 Min.

Dieser Artikel beschreibt, wie man in einer MySQL Datenbank doppelte Datensätze mit SQL finden kann. Da zur Problemlösung ANSI SQL verwendet wird, dürfte man auch auf anderen RDBMS zum gleichen Ziel kommen.

Ich verwende für den hier beschriebenen Lösungsansatz die folgende Beispieltabelle:

Struktur der Beispieltabelle, um doppelte Datensätze mit SQL finden zu können

In dieser Tabelle habe ich die folgenden Datensätze eingegeben, mit denen die SQL Abfragen arbeiten werden:

Inhalt der Beispieltabelle, um doppelte Datensätze mit SQL finden zu können

Die Tabelle enthält die drei Felder “plz”, “bundesland” und “land”, die zum Finden von Dubletten relevant sind. Ferner enthält die Tabelle sechs Datensätze. Einige davon sind doppelt, so daß man aufgrund von SQL Abfragen auf Dubletten abfragen kann.

Abstrakt formuliert muß die Abfrage wie folgt aufgebaut sein:

SELECT {feld oder feldliste}, COUNT(*)
FROM {tabelle}
GROUP BY {feld, welches auf Dubletten geprüft werden soll}
HAVING COUNT(*) > 1;

Zunächst handelt es sich um eine einfache SELECT Abfrage mit einem oder mehreren Feldnamen und einem Zähler. Weiter braucht es noch die beiden CLauses GROUP BY und HAVING. GROUP BY gruppiert die Ergebnismenge nach einem bestimmten Feld. Es bestimmt, in welchem Feld nach den Dubletten gesucht wird. HAVING fungiert wie eine WHERE Clause bezogen auf die GROUP BY Clause. Das heißt, daß die Ergebnismenge durch die Aggregatfunktionen (AVG, COUNT, MAX, MIN, SUM) eingeschränkt wird. Hier kommt der eingangs erwähnte Zähler zum Einsatz. Mit COUNT(*) > 1 werden nur diejenigen Datensätze für die Ergebnismenge herangezogen, bei denen mehr als ein Datensatz die Bedingung erfüllt, in dem durch GROUP BY gewählten Feld eine Gruppierung zu erzeugen.

Nach der vielen Theorie nun ein paar Beispiele zum besseren Verständnis. Wir haben in unserer Tabelle die drei Felder “plz”, “bundesland” und “land”, die wir alle für unsere Abfrage verwenden wollen. Im ersten Beispiel wollen wir sehen, ob es Datensätze gibt, bei denen die PLZ mehrfach vorkommt. Dazu schreiben wir folgende SQL Abfrage:

SELECT plz, bundesland, land, COUNT(*)
FROM dubletten
GROUP BY plz
HAVING COUNT(*) > 1;

Das Ergebnis dieser Abfrage sieht so aus:

Abfrage auf doppelte PLZ

Die PLZ “10120” und die PLZ “6400” kommen jeweils 2 Mal in der Tabelle vor. Wenn wir uns die Tabelle mit den sechs Datensätzen oben ansehen, dann stimmt das Ergebnis der Abfrage.

Im zweiten Beispiel prüfen wir, wie oft das gleiche Bundesland mehrfach vorkommt. Hierzu die folgende Abfrage:

SELECT plz, bundesland, land, COUNT(*)
FROM dubletten
GROUP BY bundesland
HAVING COUNT(*) > 1;

Dieses Mal sieht die Ergebnismenge so aus:

Beispiel für doppekte Bundesländer

Wir sehen, daß das Bundesland “10” drei Mal und das Bundesland “11” zwei Mal vorkommt. Auch dies können wir aufgrund der Ausgangstabelle leicht verifizieren und stellen fest, daß die Abfrage auch hier richtig arbeitet.

Im dritten und letzten Beispiel prüfen wir mit einer SQL Abfrage, ob das Land doppelt oder mehrfach in der Tabelle vorkommt. Diese Frage beantworten wir mit der folgenden Abfrage:

SELECT plz, bundesland, land, COUNT(*)
FROM dubletten
GROUP BY land
HAVING COUNT(*) > 1;

Und hierzu auch wieder die Ergebnismenge:

Beispiel für doppelte Länder

Wir sehen hier zwei Datensätze mit dem Land “CH” und vier Datensätze mit dem Land “DE”. Auch dieses Ergebnis stimmt.

Noch zu erwähnen wäre, daß man in der GROUP BY Clause auch mehrere Felder mit Komma getrennt aufführen kann. Dann werden alle Felder zur Dublettensuche herangezogen.

Und damit endet dieser Artikel zum Thema “Doppelte Datensätze mit SQL finden”.

Ähnliche Artikel:

Kommentare(1)

Fragen oder Feedback zu diesem Artikel

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert