[MySQL] Dubbele entries verwijderen.... mijn methode goed?

Pagina: 1
Acties:

  • M_V
  • Registratie: Maart 2001
  • Laatst online: 30-11 11:57
Ik zat wat na te lezen op de MySQL fora en daar gaf iemand de volgende tip om dubbele entries te verwijderen:
First step is to create a unique auto_increment primary key. THen you can join the table to itself matching dups to dups with a lower value PK, and retain those who don't have one:

DELETE t1
FROM table AS t1
LEFT JOIN table AS t2 ON t1.name = t2.name AND t1.pk > t2.pk
WHERE t2.pk IS NOT NULL;

where `name` is the field on which to test for duplicates.
Ik doe altijd gewoon:
create table blaat select * from ouwetabel group by veld1,veld2,veld3

Ik heb het ff geprobeerd en met een klein tabelltje komt er volgend mij hetzelfde uit. Of zie ik iets over het hoofd?

  • Janoz
  • Registratie: Oktober 2000
  • Laatst online: 14:25

Janoz

Moderator Devschuur®

!litemod

Die oplossing van jou werkt alleen maar omdat MySQL een enorm brakke implementatie heeft van 'group by'. Daarnaast heb je (inherent aan die brakke implementatie) geen enkele garanties over welk record er nu uiteindelijk overblijft (en of alle velden wel bij dat record horen).

Bovenstaande gaat trouwens niet op wanneer je al je velden benoemd hebt in je group by. Het enige wat dan nog overblijft wat als 'nadeel' van jou manier gezien kan worden is dat er in jouw geval alles naar een tweede tabel gekopieerd wordt. Het op het forum gegeven voorbeeld werkt binnen dezelfde tabel.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'