Такие читатели, как вы, помогают поддерживать MUO. Когда вы совершаете покупку по ссылкам на нашем сайте, мы можем получать партнерскую комиссию. Читать далее.

Рекомендации по проектированию баз данных рекомендуют использовать ограничение UNIQUE для предотвращения дублирования в базе данных. Однако при работе с плохо спроектированной базой данных или нечистыми данными может потребоваться самостоятельно найти дубликаты и удалить их вручную.

Читайте дальше, чтобы узнать, как найти дубликаты в базе данных SQL и как их удалить.

Создайте образец базы данных

В демонстрационных целях создайте таблицу с именем Users со столбцом имени и оценки, выполнив этот SQL-запрос.

УРОНИТЬСТОЛЕСЛИСУЩЕСТВУЕТПользователи;

СОЗДАВАТЬСТОЛПользователи (
pk_id инт ОСНОВНОЙ КЛЮЧ,
имя ВАРЧАР (16),
оценка ИНТ,
);

Вставьте несколько примеров значений, выполнив этот запрос:

ВСТАВЛЯТЬВ
Пользователи (pk_id, имя, счет)
ЦЕННОСТИ
(1, 'Джейн', 20),
(2, 'Джон', 13),
(3, 'Алекс', 32),
(4, 'Джон', 46),
(5, 'Джейн', 20),
(6, 'Мэри', 34),
(7, 'Джейн', 20),
(8, 'Джон', 13)
instagram viewer

Обратите внимание, что некоторые из этих строк содержат повторяющиеся значения для столбца имени.

Не стесняйтесь проверить эти SQL-команды и запросы если вам нужно более подробное объяснение того, как манипулировать базами данных с помощью SQL.

Использование GROUP BY для поиска повторяющихся значений

Ты можешь используйте оператор GROUP BY для упорядочения значений отвечающие определенным условиям в одной группе.

Допустим, имена в таблице примеров должны быть уникальными. Вы можете использовать GROUP BY для группировки строк с одинаковым именем.

ВЫБИРАТЬимя, СЧИТАТЬ(имя)
ОТ пользователей
СГРУППИРОВАТЬ ПО имени
СЧЕТЧИК(имя) > 1

COUNT позволяет выбрать строки, в которых есть более одного пользователя с одинаковым именем.

Когда вы запустите этот запрос, база данных вернет строки, содержащие Джона и Джейн, как дубликаты.

Удаление дубликатов из базы данных

Найдя дубликаты, вы можете удалить их с помощью инструкции DELETE.

Для этого примера выполните следующий запрос:

С ктэ КАК (
ВЫБИРАТЬ *
ROW_NUMBER() БОЛЕЕ (
РАЗДЕЛ ПО
имя, оценка
СОРТИРОВАТЬ ПО
имя, оценка
) Р
ОТ
Пользователи
)

УДАЛИТЬОТ ктэ
ГДЕ R > 1;

Этот запрос использует выражение CTE для поиска дубликатов, а затем удаляет их все, кроме одного.

Почему вы должны удалять повторяющиеся данные

Удаление повторяющихся данных не является обязательным. Однако это позволяет освободить пространство, которое используют повторяющиеся строки.

Меньшее количество строк также означает, что запросы могут выполняться намного быстрее, что приводит к более высокой производительности. Используйте запросы в этом руководстве, чтобы помочь вам найти и удалить дубликаты из базы данных SQL.