2013-08-09 6 views
5

Ein Programmierfehler führte zu mehreren Einfügungen identischer Zeilen in dieser Tabelle. Ich bin mir bewusst, dass Einschränkungen im Schema die Einfügungen verhindern können.Deduplizierung der mySQL-Tabelle

screenshot

Ich versuche, einen Weg zu finden, aber die neueste (höchste id) Zeile für jede Runde/Zahlenpaar zu löschen. Ich könnte das definitiv skripten, aber ich fragte mich, ob es eine Möglichkeit gibt, dies in reinem SQL zu tun?

+0

Es ist mySQL 5.1.70-CLL – jerrygarciuh

Antwort

7

Im Allgemeinen können Sie tun:

delete from your_table 
where id not in 
(
    select max(id) from your_table 
    group by user, round, date, number 
) 

In MySQL Sie aus derselben Tabelle nicht löschen können Sie auswählen. Aber Sie können MySQL Trick mit einer anderen Unterabfrage wie folgt aus:

delete from your_table 
where id not in 
(
    select * from 
    (
     select max(id) from your_table 
     group by user, round, date, number 
    ) x 
) 
+0

netter Trick. danke –

+0

Danke! Ich schätze die Lektion! – jerrygarciuh

+0

Bitte beachten Sie, dass zwei (oder mehr) Datensätze den gleichen MAX-Wert teilen können. – wildplasser

Verwandte Themen