Einführung
Es gibt mehrere Fälle, in denen Sie möglicherweise auf doppelte Zeilen in Ihrer MySQL-Datenbank stoßen. Diese Anleitung führt Sie durch den Vorgang zum Entfernen doppelter Zeilenwerte in MySQL.

Voraussetzungen
- Ein System mit installiertem MySQL
- Ein MySQL-Root-Benutzerkonto
- Zugriff auf ein Terminalfenster / eine Befehlszeile (Strg-Alt-T, Suche> Terminal)
Testdatenbank einrichten
Wenn Sie bereits eine MySQL-Datenbank haben, an der Sie arbeiten können, fahren Sie mit dem nächsten Abschnitt fort.
Öffnen Sie andernfalls ein Terminalfenster und geben Sie Folgendes ein:
mysql –u root –p
Wenn Sie dazu aufgefordert werden, geben Sie den Stamm ein Passwort für Ihre MySQL-Installation. Wenn Sie ein bestimmtes Benutzerkonto haben, verwenden Sie diese Anmeldeinformationen anstelle von root.

Die Systemeingabeaufforderung sollte sich ändern in:
mysql>
Testdatenbank erstellen
Sie können eine neue Tabelle in einer vorhandenen Datenbank erstellen. Suchen Sie dazu die entsprechende Datenbank, indem Sie alle vorhandenen Instanzen auflisten mit:
SHOW DATABASES;

Alternativ können Sie eine neue Datenbank erstellen, indem Sie den folgenden Befehl eingeben:
CREATE DATABASE IF NOT EXISTS testdata;

Um mit der Arbeit an Ihren neuen testdata
zu beginnen Datenbanknutzung:
USE testdata;
Tabelle und Daten hinzufügen
Sobald Sie sich in der Datenbank befinden, fügen Sie mit dem folgenden Befehl eine Tabelle mit den folgenden Daten hinzu:
CREATE TABLE dates (
id INT PRIMARY KEY AUTO_INCREMENT,
day VARCHAR(2) NOT NULL,
month VARCHAR(10) NOT NULL,
year VARCHAR(4) NOT NULL
);
INSERT INTO dates (day,month,year)
VALUES (’29’,’January’,’2011’),
(’30’,’January’,’2011’),
(’30’,’January’,’2011’),
(’14’,’February,’2017’),
(’14’,’February,’2018’),
(‘23’,’March’,’2018’),
(‘23’,’March’,’2018’),
(‘23’,’March’,’2019’),
(‘29’,’October’,’2019’),
(‘29’,’November’,’2019’),
(‘12’,’November’,’2017’),
(‘17’,’August’,’2018’),
(‘05’,’June’,’2016’);
Den Inhalt der Datumstabelle anzeigen
Geben Sie Folgendes ein, um alle von Ihnen eingegebenen Daten sortiert nach Jahr anzuzeigen:
SELECT * FROM dates ORDER BY year;

Die Ausgabe sollte eine Liste mit Datumsangaben in der entsprechenden Reihenfolge anzeigen.
Doppelte Zeilen anzeigen
Um herauszufinden, ob es doppelte Zeilen in der Testdatenbank gibt, verwenden Sie den Befehl:
SELECT
day, COUNT(day),
month, COUNT(month),
year, COUNT(year)
FROM
dates
GROUP BY
day,
month,
year
HAVING
COUNT(day) > 1
AND COUNT(month) > 1
AND COUNT(year) > 1;
Das System zeigt alle doppelten Werte an. In diesem Fall sollten Sie Folgendes sehen:

Dieses Format funktioniert, um mehrere Spalten auszuwählen. Wenn Sie eine Spalte mit einer eindeutigen Kennung haben, z. B. eine E-Mail-Adresse in einer Kontaktliste oder eine einzelne Datumsspalte, können Sie einfach aus dieser einen Spalte auswählen.
Doppelte Zeilen entfernen
Bevor Sie eine der unten genannten Methoden verwenden, denken Sie daran, dass Sie in einer vorhandenen Datenbank arbeiten müssen. Wir werden unsere Beispieldatenbank verwenden:
USE testdata;
Option 1:Doppelte Zeilen mit INNER JOIN entfernen
Um doppelte Zeilen in unserer Test-MySQL-Tabelle zu löschen, verwenden Sie MySQL JOINS und geben Sie Folgendes ein:
delete t1 FROM dates t1
INNER JOIN dates t2
WHERE
t1.id < t2.id AND
t1.day = t2.day AND
t1.month = t2.month AND
t1.year = t2.year;

Sie können auch den Befehl von Duplikate anzeigen verwenden Zeilen um die Löschung zu bestätigen.
Option 2:Doppelte Zeilen mithilfe einer Zwischentabelle entfernen
Sie können eine Zwischentabelle erstellen und verwenden Sie es, um doppelte Zeilen zu entfernen. Dies geschieht, indem nur die eindeutigen Zeilen in die neu erstellte Tabelle übertragen und die ursprüngliche (mit den verbleibenden doppelten Zeilen) gelöscht wird.
Befolgen Sie dazu die nachstehenden Anweisungen.
1. Erstellen Sie eine Zwischentabelle, die dieselbe Struktur wie die Quelltabelle hat, und übertragen Sie die in der Quelle gefundenen eindeutigen Zeilen:
CREATE TABLE [copy_of_source] SELECT DISTINCT [columns] FROM [source_table];
Zum Beispiel, um eine Kopie der Struktur der Beispieltabelle dates
zu erstellen Der Befehl lautet:
CREATE TABLE copy_of_dates SELECT DISTINCT id, day, month, year FROM dates;

2. Danach können Sie die Quelltabelle mit dem Drop-Befehl löschen und die neue umbenennen:
DROP TABLE [source_table];
ALTER TABLE [copy_of_source] RENAME TO [source_table];
Zum Beispiel:
DROP TABLE dates;
ALTER TABLE copy_of_dates RENAME TO dates;

Option 3:Doppelte Zeilen mit ROW_NUMBER() entfernen
Wichtig: Diese Methode ist nur für MySQL-Version 8.02 verfügbar und später. Überprüfen Sie die MySQL-Version, bevor Sie diese Methode ausprobieren.
Eine andere Möglichkeit, doppelte Zeilen zu löschen, ist die ROW_NUMBER()
Funktion.
SELECT *. ROW_NUMBER () Over (PARTITION BY [column] ORDER BY [column]) as [row_number_name];
Daher wäre der Befehl für unsere Beispieltabelle:
SELECT *. ROW_NUMBER () Over (PARTITION BY id ORDER BY id) as row_number;
Die Ergebnisse enthalten eine row_number Säule. Die Daten werden nach id partitioniert und innerhalb jeder Partition gibt es eindeutige Zeilennummern. Eindeutige Werte sind mit der Zeilennummer 1 gekennzeichnet , während Duplikate 2 sind , 3 , und so weiter.
Um doppelte Zeilen zu entfernen, müssen Sie daher alles außer den mit 1 markierten löschen. Dies geschieht durch Ausführen eines DELETE
Abfrage mit row_number
als Filter.
Um doppelte Zeilen zu löschen, führen Sie Folgendes aus:
DELETE FROM [table_name] WHERE row_number > 1;
In unserem Beispiel Datum Tabelle wäre der Befehl:
DELETE FROM dates WHERE row_number > 1;
Die Ausgabe teilt Ihnen mit, wie viele Zeilen betroffen sind, d. h. wie viele doppelte Zeilen gelöscht wurden.
Sie können überprüfen, ob keine doppelten Zeilen vorhanden sind, indem Sie Folgendes ausführen:
SELECT * FROM [table_name];
Zum Beispiel:
SELECT * FROM dates;