Best Practices für das Datenbankdesign empfehlen die Verwendung der UNIQUE-Einschränkung, um Duplikate in einer Datenbank zu verhindern. Wenn Sie jedoch mit einer schlecht gestalteten Datenbank oder unsauberen Daten arbeiten, müssen Sie möglicherweise selbst Duplikate finden und manuell löschen.
Lesen Sie weiter, um zu erfahren, wie Sie Duplikate in einer SQL-Datenbank finden und löschen können.
Erstellen Sie eine Beispieldatenbank
Erstellen Sie zu Demonstrationszwecken eine Tabelle mit dem Namen „Benutzer“ mit einer Spalte „Name“ und „Score“, indem Sie diese SQL-Abfrage ausführen.
TROPFENTISCHWENNVORHANDENBenutzer;
ERSTELLENTISCHBenutzer (
pk_id int PRIMÄRSCHLÜSSEL,
Name VARCHAR (16),
Punktzahl INT,
);
Fügen Sie einige Beispielwerte ein, indem Sie diese Abfrage ausführen:
EINFÜGUNGHINEIN
Benutzer (pk_id, name, score)
WERTE
(1,
'Jane', 20),
(2, 'John', 13),
(3, 'Alex', 32),
(4, 'John', 46),
(5, 'Jane', 20),
(6, 'Maria', 34),
(7, 'Jane', 20),
(8, 'John', 13)
Beachten Sie, dass einige dieser Zeilen doppelte Werte für die Namensspalte enthalten.
Schauen Sie sich diese gerne an SQL-Befehle und Abfragen wenn Sie eine tiefergehende Erklärung benötigen, wie man Datenbanken mit SQL manipuliert.
Verwenden von GROUP BY, um doppelte Werte zu finden
Du kannst Verwenden Sie die GROUP BY-Anweisung, um Werte anzuordnen die bestimmte Bedingungen in der gleichen Gruppe erfüllen.
Angenommen, die Namen in der Beispieltabelle müssen eindeutig sein. Sie können GROUP BY verwenden, um die Zeilen mit demselben Namen zu gruppieren.
WÄHLENName, ZÄHLEN(Name)
VON Benutzern
GRUPPIEREN NACH Namen
ZÄHLEN HABEN (Name) > 1
Mit COUNT können Sie die Zeilen auswählen, die mehr als einen Benutzer mit demselben Namen haben.
Wenn Sie diese Abfrage ausführen, gibt die Datenbank Zeilen zurück, die John und Jane als Duplikate enthalten.
Löschen von Duplikaten aus einer Datenbank
Nachdem Sie die Duplikate gefunden haben, möchten Sie sie möglicherweise mit der DELETE-Anweisung löschen.
Führen Sie für dieses Beispiel die folgende Abfrage aus:
MIT cte ALS (
WÄHLEN *
ROW_NUMBER() OVER (
TEILEN DURCH
Name, Punktzahl
SORTIEREN NACH
Name, Punktzahl
) R
AUS
Benutzer
)
LÖSCHENAUS cte
WO R > 1;
Diese Abfrage verwendet einen CTE-Ausdruck, um die Duplikate zu finden, und löscht dann alle außer einem.
Warum Sie doppelte Daten löschen sollten
Das Löschen doppelter Daten ist kein Muss. Sie können jedoch den Speicherplatz freigeben, den doppelte Zeilen verwenden.
Weniger Zeilen bedeuten auch, dass Abfragen viel schneller ausgeführt werden können, was zu einer höheren Leistung führt. Verwenden Sie die Abfragen in diesem Lernprogramm, um Duplikate in einer SQL-Datenbank zu finden und zu entfernen.