Usuwanie duplikatów z tabeli MySQL

Filed Under (informatyka) by Tomek on 09-05-2009

mysql

Z racji Juwenaliów i zbliżającej się sesji, wpisy rzadsze, ale mam nadzieję, że wartościowe :-)

Potrzebowałem ostatnio usunąć z bazy adresów e-mail powtarzające się wpisy i znalazłem na to ciekawe rozwiązanie w komentarzach do jednego z zagranicznych blogów, które dla potomności przedstawiam poniżej.

  1. DELETE FROM table1
  2. USING table1, table1 AS vtable
  3. WHERE (table1.id > vtable.id)
  4. AND (table1.field_name = vtable.field_name)

Analizując po kolei:

  1. Usuwamy rekordy z tabeli table1
  2. Używając tabeli table1 raz jako jej samej i drugi raz jako tabeli wirtualnej pod nazwą vtable (daje nam to możliwość porównywania rekordów z innymi w tej samej tabeli)
  3. Zabezpieczamy się przed porównaniem rekordu ze samym sobą oraz wcześniejszymi rekordami, z którymi został on już porównany (id jest kluczem tabeli)
  4. Każemy usunąć rekordy, w których wartość pola field_name jest taka sama

Nazwy table1, id, field_name zamieniamy na nazwy tabel i pól we własnej bazie danych.

Comments:

(5) Comments for the first post!

Post a comment