Как удалить дубликаты из таблицы в 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-699249663c4f6575370426/] Где new-user-name - имя нового пользователя, ...

Читать

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

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

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

Читать

Развертывание бекапов mySQL из консоли unix

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

Как развернуть дамп базы данных mySQL, созданный ранее? Дамп представляет из себя mysql скрипт, в котором последовательно создаются таблицы (CREATE TABLE ...) и, возможно, другие объекты и производиться их наполнение (INSERT INTO ...). Нужно лишь отправить ...

Читать

Mysqldump без блокировки таблиц

Ноябрь 11, 2019 г.

По умолчанию для mysqldump требуются права пользователя на блокировку таблиц. Потому, когда вы создаёте бекапы, вы можете получить сообщение вроде: mysqldump: Got error: 1044: "Access denied for user 'USER'@'%' to database 'DATABASENAME'" when ...

Читать
 

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

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



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