3 способа удалить дубликаты строк в SQL

Введение

Дублирующиеся записи – это “обычная” проблема качества данных, которая встречается в любых базах данных. Если их не обрабатывать должным образом, они исказят точность ваших анализов, нарушат целостность данных и зря потратят ценное место в хранилище.

В этой статье я расскажу, как можно удалить дубликаты строк в SQL. Если у вас есть дубликаты записей в таблице и вы хотите удалить их, вы можете воспользоваться одним из трех методов, о которых я расскажу. Для иллюстрации мы будем использовать таблицу ниже (под названием “Страна”). В этой таблице есть 3 столбца, и в столбцах название страны и столица города есть несколько дублирующихся строк. Что же можно сделать, чтобы удалить дубликаты?

3 способа удалить дубликаты строк в SQL

Найдите дублирующиеся строки

Прежде чем я покажу вам, как удалять дубликаты, давайте сначала напишем запрос для поиска дубликатов. Приведенный ниже запрос найдет количество записей с одинаковыми значениями.

3 способа удалить дубликаты строк в SQL

Предложение HAVING гарантирует, что будут показаны только строки с количеством больше 1. Столбцы в предложении SELECT и GROUP BY указывают на то, что ряд является дубликатом, в данном случае это названиестраны и столицагорода. В данном примере, если строка имеет то же название страны и столицы, что и другая строка, то она является дубликатом. В таблице ниже показаны записи, в которых есть дубликаты. Теперь давайте удалим их!

3 способа удалить дубликаты строк в SQL

Метод 1: использование оператора DELETE

Первый способ – использовать оператор DELETE. Мы можем удалить из одной таблицы и присоединиться к той же таблице, где ID меньше, чем ID присоединяемой таблицы. Мы соединяемся по полям, которые используются для определения того, является ли строка дубликатом. В данном случае это названиестраны и столицагорода. А столбец ID – это ваш первичный ключ или уникальный идентификатор строки. Должен быть способ удалить все строки, кроме одной. И если у вас есть поле ID или какой-то первичный ключ, вы можете использовать его здесь.

3 способа удалить дубликаты строк в SQL

Если вы выполните приведенный выше запрос, вы увидите, что некоторые строки (дубликаты) удалены. Чтобы проверить это, можно использовать тот же запрос, который мы использовали для поиска дубликатов строк, чтобы посмотреть, остались ли дубликаты в таблице. Результаты должны показать, что дубликатов нет. Но этот метод может не сработать, если у вашей таблицы нет идентификатора или если в операторе DELETE не допускается использование двух таблиц.

Метод 2: добавление уникальных или DISTINCT-записей

Другой способ удаления дублирующихся записей – добавить уникальные записи в новую таблицу и использовать ее для замены старой. При использовании этого метода мы начинаем с создания новой таблицы. Мы создаем новую таблицу в виде оператора select, и этот оператор select будет извлекать отдельные записи из другой таблицы. В данном случае мы хотим вставить только одну строку для каждой из записей, и для этого нам нужно использовать GROUP BY.

3 способа удалить дубликаты строк в SQL

Другой подход заключается в использовании ключевого слова DISTINCT в операторе select.

3 способа удалить дубликаты строк в SQL

После заполнения новой таблицы вы можете удалить старую таблицу и переименовать новую таблицу в старую, как показано ниже. Синтаксис может отличаться, если вы используете разные базы данных.

3 способа удалить дубликаты строк в SQL

Метод 3: использование функции ROW_NUMBER()

Третий способ – использовать функцию ROW_NUMBER(). Вы можете использовать функцию ROW_NUMBER() внутри подзапроса, чтобы найти номер строки и удалить все строки, кроме первой.

3 способа удалить дубликаты строк в SQL

Приведенный выше запрос представляет собой оператор DELETE, который удаляет дубликаты записей из таблицы country, ID которых найден в подзапросе. В подзапросе для обнаружения дубликатов можно использовать функцию ROW_NUMBER(), а в предложении PARTITION BY нужно указать столбцы, которые делают их дубликатами, в нашем примере это названиестраны и столицагорода. Выполнив приведенный выше запрос, вы удалите все дублирующиеся строки в таблице.

Заключение

Вот как можно удалить дубликаты записей в SQL. Безусловно, есть и другие методы, которые вы можете использовать, но для меня лучшим подходом является метод 3, использующий функцию ROW_NUMBER(). Помните, что всегда нужно проверять наличие дубликатов записей в конвейере данных, делать резервные копии перед модификацией таблиц и удалять их по мере необходимости.

Спасибо за чтение и давайте подключаться!

+1
0
+1
0
+1
0
+1
0
+1
0

Ответить

Ваш адрес email не будет опубликован. Обязательные поля помечены *