Как удалить дубликаты из таблицы в 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 и выдать ему права на базу данных

Июль 20, 2023 г.

Обычно для этого требуется выполнить две команды - создать пользователя, выдать права. Создание пользователя MySQL Для нашей цели достаточно выполнить следующую команду: [crayon-698e82ea09bad640856063/] Где new-user-name - имя нового пользователя, ...

Читать

Курсоры в MySQL

Август 26, 2015 г.

MySQL позволяет использовать курсоры (CURSORs) в хранимых процедурах. Эта конструкция позволяет организовать сложную обработку данных на стороне сервера ...

Читать

Нумерация при выборке строк в mySQL

Апрель 24, 2023 г.

В MSSQL есть функция ROW_NUMBER(), которая нумерует строки выборки. В MySQL такой функции пока нет, но мы можем использовать трюк с переменными для достижения нужного эффекта. К примеру, вы хотите выбрать название книг и пронумеровать список. Изначально ...

Читать

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

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

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

Читать
 

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

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



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