Heim > Datenbank > MySQL-Tutorial > Wie lösche ich doppelte Datensätze in MySQL und behalte gleichzeitig die neuesten Daten?

Wie lösche ich doppelte Datensätze in MySQL und behalte gleichzeitig die neuesten Daten?

Mary-Kate Olsen
Freigeben: 2024-12-01 13:30:11
Original
275 Leute haben es durchsucht

How to Delete Duplicate Records in MySQL While Retaining the Latest?

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 
Nach dem Login kopieren

Identifizieren von Duplikaten E-Mails

    select email 
    from test
    group by email
    having count(*) > 1;
Nach dem Login kopieren

Diese Abfrage gibt das folgende Ergebnis zurück, was darauf hinweist, dass „aaa“, „bbb“ und „eee“ wiederholte E-Mails sind:

    EMAIL                
    -------------------- 
    aaa                  
    bbb                  
    eee  
Nach dem Login kopieren

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;
Nach dem Login kopieren

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                                 
Nach dem Login kopieren

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 dem Login kopieren

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   |
    +----+-------+
Nach dem Login kopieren

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)
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage