Jeg ville gøre det på følgende måde:
-
Opret en midlertidig tabel fra din eksisterende tabel:
CREATE TEMPORARY TABLE data_to_keep LIKE table_with_dupes_in_it
-
Udfyld den midlertidige tabel med netop de poster, du ønsker:
INSERT INTO data_to_keep SELECT DISTINCT * FROM table_with_dupes_in_it
-
Tøm bordet
TRUNCATE TABLE table_with_dupes_in_it
-
Returner dataene fra den midlertidige tabel til den oprindelige tabel
INSERT INTO table_with_dupes_in_it SELECT * FROM data_to_keep;
-
Ryd op
DROP TEMPORARY TABLE data_to_keep
Vær opmærksom på, at dette kan optage en enorm mængde hukommelse og/eller lagerplads, hvis det pågældende bord er stort. Hvis det er et stort bord, ville jeg være tilbøjelig til at bruge en rigtig tabel i stedet for en midlertidig tabel for ikke at æde for store mængder hukommelse på din DB-server.
REDIGER FOR TILFØJ:
Hvis du bare er bekymret for delvise duperinger (rækker, hvor kun nogle af dataene er identiske med tidligere indtastede data), så vil du bruge GROUP BY. Når du bruger GROUP BY, kan du begrænse MySQL til kun at returnere én række, der indeholder givne data i stedet for dem alle.
SELECT *
FROM table
GROUP BY column_name
Du bør også overveje at bruge UNIQUE indekser på de kolonner, du ikke ønsker at indeholde duplikerede data, dette vil forhindre brugere i at indsætte duplikerede data i første omgang.