2015-06-11 13 views
5

Mam zbiór 2,00,00 wierszy datas w mojej tabeli MySQL. Teraz chciałbym usunąć 2. duplikat rekordu w tabeli. (ie), Pierwszy rekord duplikatu nie powinien być usunięty. Usuń tylko drugi zduplikowany rekord w tabeli.Usuń 2nd Duplicate Record w mySql Table

Przykład

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

W tym przykładzie identyfikatorów (1,3,5), (2,7) zawiera duplikaty. Chciałbym usunąć wierszy 3,5,7

oczekiwany wynik

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

A problem jest? – Goikiu

+1

Czy próbowałeś czegoś? – Mat

+0

Czy próbowałeś czegoś? – cars10m

Odpowiedz

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

to będzie działać dobrze.

Sprawdź tutaj: http://www.sqlfiddle.com/#!9/825e0/1

+0

Dziękuję ... Działa .. –

5

Spróbuj tego

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

proste n skuteczne –

6

masz tabelę z zduplikowane wiersze - Jakoś unikatowy indeks nie dostał utworzone i błąd dodał duplikaty rekordów do twojej tabeli.

Wymaga zmiany tabeli przez dodanie ograniczenia UNIQUE.

Możesz użyć tej kwerendy w następujący sposób:

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

Należy uruchomić tę kwerendę, aby upewnić się, że nie ma zduplikowane wpisy mogą pojawić się również w tabeli:

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

ale można to zrobić jeśli tabela jest pusta.

czy istniały zapisy, spróbuj dodać IGNORE

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

UWAGA: W przypadku, jeśli wstawienie danych przy użyciu skryptu po stronie serwera (wydaje używasz PHP jako oznaczony), a następnie użyć poprawności zapisu istnienie w tabela też.

+0

Oczekuje się, że wyjaśnienie pomoże przyszłym użytkownikom SO, którzy natkną się na tę odpowiedź. –

+0

Aby upewnić się, że duplikat z wyższym ID zostanie usunięty, powinieneś użyć polecenia "WHERE (table1.ID> vtable.ID)" ... – cars10m

2

To trochę boli w MySQL. Chciałbym to zrobić za pomocą 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;