2013-08-09 15 views
5

Un errore di programmazione porta a più inserimenti di righe identiche in questa tabella. Sono consapevole che i vincoli nello schema potrebbero impedire gli inserimenti.Deduping tabella mySQL

screenshot

Sto cercando di trovare un modo per eliminare tutti, ma il più recente (più alto id) riga per ogni coppia di turno/numero. Potrei sicuramente scrivere questo script, ma mi chiedevo se c'è un modo per farlo in puro SQL?

+0

È mySQL 5.1.70-CLL – jerrygarciuh

risposta

7

In generale si può fare:

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

In MySQL non è possibile eliminare dalla stessa tabella si sta selezionando da. Ma si può ingannare MySQL con un altro subquery in questo modo:

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

bel trucco. grazie –

+0

Grazie! Apprezzo la lezione! – jerrygarciuh

+0

Si prega di notare che due (o più) record potrebbero condividere lo stesso valore MAX. – wildplasser