2015-06-11 24 views
5

Ho una raccolta di dati di 2,00,00 righe nella mia tabella MySQL. Ora vorrei rimuovere il secondo record duplicato in una tabella. (Ad es.), la prima registrazione di un valore duplicato non dovrebbe essere cancellata. Elimina solo il 2 ° record duplicato in una tabella.Elimina 2 ° record duplicato in mySql Tabella

Esempio

id | logEntry | logValue 
-------------------------------- 
1 | AA15AA7515 | 11445588 
2 | AAFIRNNFIE | 99586454 
3 | AA15AA7515 | 14589313 
4 | AA9894AF56 | 15985632 
5 | AA15AA7515 | 16124246 
6 | AA69481533 | 15454186 
7 | AAFIRNNFIE | 12788549 

In questo esempio Id (1,3,5), (2,7) contiene duplicati. Vorrei rimuovere le righe 3,5,7

output previsto

id |  Entry | Value 
-------------------------------- 
1 | AA15AA7515 | 11445588 
2 | AAFIRNNFIE | 99586454 
4 | AA9894AF56 | 15985632 
6 | AA69481533 | 15454186 
+0

E il problema è? – Goikiu

+1

Hai provato qualcosa? – Mat

+0

Hai provato qualcosa? – cars10m

risposta

6
delete from temp1 where id in (select x.id from (select a.id from temp1 a, 
temp1 b where a.id<>b.id and a.logentry=b.logentry and a.id>b.id group by 
a.id) x); 

questo funzionerà bene.

Controlla qui: http://www.sqlfiddle.com/#!9/825e0/1

+0

Grazie .. Funziona .. –

5

Prova a questa

Delete From table_name 
where id not in(select min(id) from table_name 
group by Entry) 
+0

simple n effective –

6

Si dispone di un tavolo con le file duplicati - In qualche modo un indice univoco non ha ottenuto creato e un bug ha aggiunto record duplicati alla tua tabella.

È necessario modificare la tabella aggiungendo un vincolo UNIQUE.

È possibile utilizzare questa query come segue:

DELETE from table1 
USING table1, table1 as vtable 
WHERE (NOT table1.ID>vtable.ID) 
AND (table1.logEntry=vtable.logEntry) 

È consigliabile eseguire questa query per assicurarsi che non le voci duplicate possono verificarsi ulteriormente nella tabella:

ALTER TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2); 

ma si può fare questo se il tavolo è vuoto

o se i record esistessero, prova ad aggiungere IGNORE

ALTER IGNORE TABLE table ADD CONSTRAINT table_unique UNIQUE (field1,field2); 

NOTA: Nel caso in cui si sta inserendo i dati utilizzando lo script lato server (sembra che si sta utilizzando PHP come etichettato) quindi utilizzare la convalida dei record di esistenza nel tavolo anche.

+0

Una spiegazione dovrebbe aiutare i futuri utenti SO che incappano in questa risposta. –

+0

Per assicurarti che il duplicato con l'ID più alto venga cancellato devi usare 'WHERE (table1.ID> vtable.ID)' ... – cars10m

2

Questo è un po 'un dolore in MySQL. Vorrei farlo utilizzando un left join

delete t 
    from table t left join 
     (select min(id) as minid 
      from table t2 
      group by entry 
     ) tokeep 
     on t.id = tokeep.minid 
    where tokeep.minid is null; 
Problemi correlati