Главная > SQL > MySQL поиск и удаление дубликатов в таблице

MySQL поиск и удаление дубликатов в таблице

Как найти и удалить дубликаты в таблице MySQL? - оказывается это довольно частый вопрос, возникающий на практике, особенно когда надо установить UNIQUE constraint.

Задачу поиска дубликатов в SQL-таблице всегда можно решить таким простым запросом:
SELECT login, COUNT(login) AS cnt FROM users GROUP BY login HAVING ( COUNT(login)>1 );
Этот запрос вернёт все дубликаты login из таблицы пользователей. Ситуация несколько искусственна, на практике врядли будут дубликаты логинов в таблице пользователей, но для примера запроса сгодится. Другой вариант, возможно более прост для понимания, при SELECT-е сделать простой JOIN таблицы самой на себя. К примеру, есть таблица scriptsettings с настройками какого-то скрипта, в ней нужно найти все дубликаты, где param (имя параметра) и group (логическое название группы параметров) дублируются. Запрос через JOIN примет вид:
SELECT s1.id AS id1, s1.group, s1.param, s2.id AS id2 FROMscriptsettings s1 INNER JOIN scriptsettings s2 ON s2.id>s1.id ANDs1.param=s2.param AND s1.group=s2.group;
Удаление дубликатов из таблицы так же можно сделать простым JOIN таблицы самой на себя:
DELETE s1 FROM scriptsettings s1, scriptsettings s2 WHEREs1.param=s2.param AND s1.id>s2.id;
Пока писал, в голову пришёл более лаконичный и элегантный способ удаления дубликатов при помощи MySQL:
ALTER IGNORE TABLE scriptsettings ADD UNIQUE INDEX(param);
Позаимствовано с: http://webaurum.blogspot.ru/
1 звезда2 звезды3 звезды4 звезды5 звезд (3 votes, average: 4,33 out of 5)
Loading...Loading...
  1. Online
    18 Июнь 2017 в 15:51 | #1

    сколько я не старался, сколько я не бился, ничего у меня не получилось. даже myPHPadmin подвисает :(

  1. Пока что нет уведомлений.

Current month [email protected] day *


+ 3 = девять

Heads up! You are attempting to upload an invalid image. If saved, this image will not display with your comment.