So löschen Sie doppelte Datensätze in MySQL und behalten gleichzeitig den neuesten Stand
Beim Umgang mit Tabellen, die eindeutige Bezeichner und doppelte E-Mail-Adressen enthalten, ist dies der Fall Oftmals ist es notwendig, diese Duplikate zu entfernen und gleichzeitig den neuesten Datensatz beizubehalten. MySQL bietet mehrere Methoden, um dieses Ziel zu erreichen.
Ein Ansatz besteht darin, die E-Mail-Adressen zu identifizieren, die sich wiederholen, und für jede dieser E-Mails den aktuellsten Datensatz, dargestellt durch die maximale ID, zu finden. Dies kann mit einer Kombination der Funktionen GROUP BY, HAVING und MAX() erfolgen.
Sobald die neuesten Datensätze identifiziert wurden, besteht der nächste Schritt darin, alle doppelten Datensätze mit einer niedrigeren ID als ihrer zu löschen jeweiligen Maximal-ID. Dies kann mit einer DELETE-Anweisung erreicht werden, die einen INNER JOIN verwendet, um die E-Mail-Adressen und ID-Werte zu vergleichen.
Beispieldatenbanktabelle
Um diesen Prozess zu veranschaulichen, betrachten Sie Folgendes: Folgende Tabelle mit dem Namen „test“:
ID EMAIL ---------------------- -------------------- 1 aaa 2 bbb 3 ccc 4 bbb 5 ddd 6 eee 7 aaa 8 aaa 9 eee
Identifizieren von Duplikaten E-Mails
select email from test group by email having count(*) > 1;
Diese Abfrage gibt das folgende Ergebnis zurück, was darauf hinweist, dass „aaa“, „bbb“ und „eee“ wiederholte E-Mails sind:
EMAIL -------------------- aaa bbb eee
Die neuesten Datensätze finden
select max(id) as lastId, email from test where email in ( select email from test group by email having count(*) > 1 ) group by email;
Diese Abfrage ruft für jeden die maximale ID und die entsprechende E-Mail-Adresse ab Duplikat:
LASTID EMAIL ---------------------- -------------------- 8 aaa 4 bbb 9 eee
Doppelte Datensätze 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;
Nach der Ausführung dieser Abfrage enthält die „Test“-Tabelle nur die neuesten Datensätze für jede E-Mail-Adresse , was zu den folgenden Daten führt:
+----+-------+ | id | email | +----+-------+ | 3 | ccc | | 4 | bbb | | 5 | ddd | | 8 | aaa | | 9 | eee | +----+-------+
Optimiertes Löschen Abfrage
Eine alternative, optimiertere Löschabfrage finden Sie unten:
delete from test where id not in ( select max(id) from test group by email)
Das obige ist der detaillierte Inhalt vonWie lösche ich doppelte Datensätze in MySQL und behalte gleichzeitig die neuesten Daten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!