Heim >Datenbank >MySQL-Tutorial >Wie kann ich doppelte Datensätze in MySQL löschen und dabei den neuesten Eintrag für jede E-Mail behalten?
Effektive Löschung doppelter Datensätze in MySQL mit neuester ID-Erhaltung
Problem:
In B. eine MySQL-Tabelle mit eindeutigen ID- und E-Mail-Feldern, entstehen doppelte E-Mail-Adressen. Die Aufgabe besteht darin, alle bis auf die letzte (zuletzt eingefügte) Instanz jeder doppelten E-Mail zu entfernen und dabei ihre eindeutige ID beizubehalten.
Lösung:
Das Problem kann gelöst werden durch einen zweistufigen Prozess, der doppelte E-Mails identifiziert und eliminiert.
Schritt 1: Duplikate identifizieren E-Mails
select email from test group by email having count(*) > 1;
Diese Abfrage gibt die Liste aller E-Mails zurück, die mehr als einmal in der Tabelle vorkommen.
Schritt 2: Doppelte Datensätze isolieren und löschen
delete test from test inner join ( select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email ) duplic on duplic.email = test.email where test.id < duplic.lastId;
Diese Abfrage führt eine Linksverknüpfung zwischen der Haupttabelle (Test) und einer Unterabfrage (Duplikat) durch enthält die neuesten IDs für jede doppelte E-Mail. Anschließend werden alle doppelten Datensätze mit IDs kleiner als der neuesten ID gelöscht, sodass nur die zuletzt eingefügte Instanz jeder E-Mail erhalten bleibt.
Alternative Lösung:
Eine prägnantere Lösung Eine effiziente Lösung finden Sie unten:
delete from test where id not in ( select max(id) from test group by email );
Diese Abfrage identifiziert und löscht alle Datensätze, bei denen es sich nicht um die letzten Duplikate handelt E-Mails.
Das obige ist der detaillierte Inhalt vonWie kann ich doppelte Datensätze in MySQL löschen und dabei den neuesten Eintrag für jede E-Mail behalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!