Удаление дубликатов в Mysql

Очень часто всплывает тема поиска дубликатов в таблицах, особенно когда надо установить UNIQUE constraint. Всегда можно обойтись таким запросом..

SELECT login, COUNT(login) AS cnt
FROM sys_users GROUP BY login
HAVING ( COUNT(login) > 1 )

Удалить соответсвенно можно запросом с простым JOIN таблиц самой на себя:

DELETE t1 FROM sys_users t1, sys_users t2 WHERE t1.login=t2.login AND t1.ID > t2.ID

Ещё один красивый и лаконичный способ..

ALTER IGNORE TABLE sys_users ADD UNIQUE INDEX(login);

Читайте также:

RSS

Комментарии

  • Comfi
    avatar
    А не подскажите, как удалить дубли в таблице?
  • Потестил и обновил статью, надеюсь поможет.
  • Сергей
    avatar
    SELECT login, COUNT(login) AS cnt
    FROM sys_users GROUP BY login
    HAVING ( COUNT(login) > 1 )

    кстати, можно использовать алиас дольше в запросе
    HAVING ( cnt > 1 )
  • Сергей
    avatar
    в смысле дАльше (во всем запросе)
  • Vlad
    avatar
    Большая благодарность
    Пол-сети перерыл, но здесь реально элегантное решение SQL.
  • Stanislav
    Реальный зачет! Отличное решение, спасибо!
  • Artu
    Thanks!
  • Азат
    ( COUNT(login) > 1 ) зачем скобки