MySQL: Doppelte Datensätze löschen und gleichzeitig die aktuellsten beibehalten
Frage: Wie kann ich doppelte E-Mail-Adressen in entfernen? eine MySQL-Tabelle erstellen und dabei die aktuellste Tabelle basierend auf dem eindeutigen ID-Feld beibehalten?
Lösung:
Um dies zu erreichen, führen Sie die folgenden Schritte aus:
Doppelte E-Mails identifizieren:
Rufen Sie eine Liste aller doppelten E-Mail-Adressen mithilfe der Abfrage ab:
SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1;
Finden Sie die neueste ID für jedes Duplikat:
Bestimmen Sie die neueste ID, die jeder doppelten E-Mail zugeordnet ist, mithilfe der Abfrage:
SELECT MAX(id) AS lastID, email FROM test WHERE email IN ( SELECT email FROM test GROUP BY email HAVING COUNT(*) > 1 ) GROUP BY email;
Älteste Duplikate löschen:
Führen Sie einen DELETE-Vorgang aus, um Duplikate zu entfernen E-Mails mit einer ID kleiner als die neueste:
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;
Optimierte Version:
Die folgende optimierte Version liefert das gleiche Ergebnis und verbessert gleichzeitig möglicherweise die Leistung:
DELETE test FROM test INNER JOIN ( SELECT MAX(id) AS lastID, email FROM test GROUP BY email HAVING COUNT(*) > 1) duplic ON duplic.email = test.email WHERE test.id < duplic.lastID;
Diese überarbeitete DELETE-Anweisung konzentriert sich auf die Beseitigung der ältesten Duplikate.
Zusätzliche Option:
Alternativ können Sie diese von Rene Limon bereitgestellte Abfrage verwenden:
DELETE FROM test WHERE id NOT IN ( SELECT MAX(id) FROM test GROUP BY email);
Dieser Ansatz behält die aktuellste doppelte E-Mail-Adresse basierend auf der maximalen ID bei.
Das obige ist der detaillierte Inhalt vonWie entferne ich doppelte E-Mail-Adressen in MySQL und behalte dabei den neuesten Datensatz bei?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!