2015-06-11 7 views
5

Ich habe eine Sammlung von 2,00,00 Zeilen Daten in meiner MySQL-Tabelle. Jetzt möchte ich den 2. Duplikat-Datensatz in einer Tabelle entfernen. (d. h.) Die erste Aufzeichnung eines doppelten Werts sollte nicht gelöscht werden. Löschen Sie nur den zweiten doppelten Datensatz in einem Tabellenbereich.Löschen Sie den zweiten doppelten Datensatz in mySql Tabelle

Beispiel

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 diesem Beispiel Id der (1,3,5), (2,7) enthalten Duplikate. Ich möchte Reihen 3,5,7

Erwartete Ausgabe

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

Und das Problem ist? – Goikiu

+1

Haben Sie etwas versucht? – Mat

+0

Haben Sie etwas versucht? – cars10m

Antwort

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); 

mit dieser fein arbeiten.

Hier überprüfen: http://www.sqlfiddle.com/#!9/825e0/1

+0

Danke .. Es funktioniert .. –

5

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

simple n effektiv –

6

Sie eine Tabelle mit doppelten Zeilen versuchen, diese haben entfernen - Irgendwie ein eindeutiger Index nicht bekommen haben erstellt und ein Fehler hat doppelte Datensätze zu Ihrer Tabelle hinzugefügt.

Muss geändert werden, um die Tabelle durch Hinzufügen von UNIQUE Constraint.

können Sie diese Abfrage wie folgt verwenden:

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

Sie sollten diese Abfrage ausführen, um sicherzustellen, dass keine doppelten Einträge weiter in der Tabelle auftreten:

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

aber Sie können dies tun, wenn die Tabelle leer ist.

oder wenn Datensätze vorhanden, versuchen Sie, IGNORE

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

HINWEIS: Im Fall, wenn Sie Daten mit serverseitigen Skripts einfügen (scheint, dass Sie PHP als getaggt verwenden) dann die Validierung der Existenz Rekord in der Verwendung Tisch auch.

+0

Eine Erklärung soll zukünftigen SO-Benutzern helfen, die auf diese Antwort stolpern. –

+0

Um sicherzustellen, dass das Duplikat mit der höheren ID gelöscht wird, sollten Sie 'WHERE (table1.ID> vtable.ID)' ... – cars10m

2

Dies ist ein bisschen ein Schmerz in MySQL. Ich tun würde dies ein 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; 
Verwandte Themen