Jag skulle göra det på följande sätt:
-
Skapa en tillfällig tabell från din befintliga tabell:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Fyll i temptabellen med bara de poster du vill ha:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Töm bordet
TRUNCATE TABLE table_with_dupes_in_it
-
Returnera data från den tillfälliga tabellen till den ursprungliga tabellen
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
Städa upp
DROP TEMPORARY TABLE data_to_keep
Observera att detta kan äta upp en enorm mängd minne och/eller lagring om bordet i fråga är stort. Om det är ett stort bord skulle jag vara benägen att använda en riktig tabell istället för en tillfällig tabell för att inte äta upp överdrivna mängder minne på din DB-server.
REDIGERA FÖR ATT LÄGA TILL:
Om du bara är orolig för partiella duperingar (rader där endast en del av uppgifterna är identiska med tidigare inmatade data) så vill du använda GROUP BY. När du använder GROUP BY kan du begränsa MySQL till att endast returnera en rad som innehåller givna data istället för alla.
SELECT *
FROM table
GROUP BY column_name
Du bör också överväga att använda UNIKA index på de kolumner som du inte vill ha dubblettdata, detta kommer att förhindra användare från att infoga dubblettdata i första hand.