Простой и эффективный метод удаления дубликатов из таблицы
Как быстро и просто удалить дубликаты данных в SQL-базе, чтобы избежать ошибок в программном коде, который использует эти данные.
12К открытий17К показов
В целом, удаление дубликатов является важной задачей для поддержания качества и производительности баз данных, а также для предотвращения ошибок в программном коде, который использует эти данные.
В этой короткой статье я хочу поделиться простым способом удаления дубликатов из таблицы. Запрос работает в базах данных MySQL, MariaDB и PostgreSQL. Если вам интересен такой запрос для других СУБД, напишите мне в комментариях.
Все вышеизложенные а также любые другие запросы можно воспроизвести на SQLize.online – онлайн редакторе SQL.
Давайте начнем. Предположим, у нас есть простая таблица с двумя столбцами: id – это первичный ключ и v простое целочисленное значение
Приведенный выше код создает таблицу и вставляет несколько значений. Выведем на экран все строки из нашей тестовой таблицы. Как видите, id имеет уникальные значения, но поле val имеет содержит дубликаты:
Наша задача состоит в том, чтобы удалить строки с поввторяющимися значениями в столбце val и сохранить уникальные значения с минимальным значением идентификатора id.
Для начала попробуем найти дубликаты. Мы можем использовать простое LEFT JOIN таблицы самой с собой по полю val с дополнительным условием для предотвращения объединения идентичных строк (для наглядности дадим алиасы для таблицы и копии):
В результате запроса получим следующий результат:
Видно, что уникальные строки с минимальным id имеют (null) в столбцах из copy_tbl. Это происходит потому что для минимального значения id в исходной таблице нет строк соответсвующих условию в таблице копии. Итак, нам нужно оставить строки в которых нет соответствия (уникальные) и удалить. Это можно осуществить следующим запросом:
P.S. Уже после написания этой статьи мой коллега @Akina предложил более короткую версию:
Если Вам понравилась статья, Вы можете поддержать автора.
12К открытий17К показов