Как удалить дубликаты из таблицы в MySQL

Под дублями можно иметь в виду разные условия. Возьмем как пример таблицу имен. В этой таблице есть повторяющиеся значения в поле name. Разберём практический способ удалить такие записи в MySQL с помощью одного SQL-запроса.

Пример исходной таблицы

Пусть у нас есть таблица people:

Видно, что ‘Петя’ встречается 2 раза, а ‘Вася’ — целых три.

Запрос для удаления дублей

В MySQL можно использовать конструкцию DELETE … USING:

Как это работает

  1. В подзапросе SELECT MAX(id) … GROUP BY name выбирается максимальный id для каждой группы строк с одинаковым name.
  2. Условие HAVING COUNT(*) > 1 оставляет только те группы строк, где действительно есть дубликаты.
  3. Основной запрос удаляет из таблицы people записи, у которых id совпадает с найденными в подзапросе.

Таким образом, для каждого дубликата удаляется строка с наибольшим id, а более «старые» строки остаются.

Что делать, если дублей больше двух

После выполнения запроса будут удалены по одному дублю из каждой группы. Т.е. ‘Вася’ всё также будет с дублем, но таких строк останется всего две.

Чтобы избавиться от дублей полностью, запрос нужно выполнять несколько раз, пока MySQL не вернёт affected rows = 0. Это будет означать, что больше дублей не осталось.


Для удаления дублей в MySQL можно использовать короткий и понятный приём через DELETE … USING с подзапросом на GROUP BY. Он удобен для «ручных» разовых чисток таблиц. А чтобы больше не сталкиваться с этой проблемой, стоит сразу добавить UNIQUE-ограничение на нужные поля.

Мало букафф? Читайте есчо !

Нумеруем строки в результатах mySQL

Март 6, 2019 г.

Для mySQL 8й версии эта статья не актуальна, т.к. там появилась целая серия замечательных функций, в том числе ROW_NUMBER(). Но пока на значительном количестве хостингов используется 5я версия. Приём прост: требуется объявить переменную и инкрементировать ...

Читать

Создание бекапов базы mySQL из консоли unix

Февраль 13, 2018 г.

Ещё одна шпаргалка по администрированию UNIX серверов. На этот раз рассмотрим несколько полезных команд для создания бекапа базы данных из консоли. Нам понадобится команда mysqldump, которая позволяет создавать sql скрипт базы или её части. Создание ...

Читать

Ошибка MySQL Incorrect datetime value: '0000-00-00 00:00:00'

Февраль 16, 2023 г.

Появляется, если поле типа datetime уже содержит подобные нулевые значения при попытке изменить как тип поля (через alter table), так и сами значения в таблице. Вероятно ошибка возникает, если вы импортировали данные в вашу базу. Скорее всего из-за ...

Читать

Как изменить значение AUTO_INCREMENT таблицы в MySQL

Август 3, 2022 г.

Наиболее простой ответ - это использование запроса alter, где вы задаёте новое значение для AUTO_INCREMENT нужной вам таблицы: [crayon-6a368f5dee935256804128/] Вы можете достичь такого же эффекта изменениями соответствующего столбца вашей таблицы: ...

Читать
 

Комментарии к «Как удалить дубликаты из таблицы в MySQL»

Понравилась статья? Есть вопросы? - пишите в комментариях.



Комментарий: