Heim  >  Artikel  >  Datenbank  >  Wie kann ich doppelte Datensätze in MySQL löschen und dabei den neuesten Eintrag für jede E-Mail behalten?

Wie kann ich doppelte Datensätze in MySQL löschen und dabei den neuesten Eintrag für jede E-Mail behalten?

DDD
DDDOriginal
2024-11-16 02:28:03471Durchsuche

How Can I Delete Duplicate Records in MySQL Keeping the Latest Entry for Each Email?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn