Как найти дубли в sql
3 года назад
Nikolai Gagarinov
Ответы
Для того чтобы найти дубликаты в базе данных SQL, можно использовать операторы SELECT и GROUP BY совместно с оператором HAVING. Например, следующий запрос позволяет найти все строки, у которых значение определенного столбца повторяется более одного раза:
Этот запрос выведет все уникальные значения столбца "столбец", а также количество раз, которое каждое значение повторяется в таблице. Результатом будут только те строки, где значение столбца повторяется более одного раза, что указывает на наличие дубликатов.
Также можно использовать операторы JOIN или подзапросы для более сложных запросов на поиск дубликатов. Важно помнить, что перед выполнением подобных операций на поиск дубликатов необходимо создать резервную копию базы данных или таблицы, чтобы избежать потери данных.
3 года назад
Elena Gromova
Дубли находят группировкой: GROUP BY по полю, которое должно быть уникальным, и HAVING COUNT(*) > 1:
Запрос вернёт адреса почты, которые встречаются больше одного раза, и сколько раз каждый.
Пример
Таблица users:
Результат запроса выше:
Дубли по нескольким полям
Перечислите поля в GROUP BY:
Показать все строки-дубли целиком
GROUP BY схлопывает строки. Чтобы увидеть каждую строку с её id, используйте оконную функцию:
Оконные функции есть в PostgreSQL, MySQL 8+, MS SQL Server и SQLite 3.25+.
Удалить дубли, оставив одну строку
Сначала проверьте, что удалится: замените DELETE на SELECT *.
Оставить строку с наименьшим id (PostgreSQL, SQLite):
В MySQL подзапрос к той же таблице нужно обернуть ещё раз, иначе будет ошибка «You can't specify target table»:
В MS SQL Server — через ROW_NUMBER:
Одинаковые строки в двух таблицах
Чтобы дубли не появлялись
Добавьте ограничение уникальности. База не даст вставить повторяющееся значение:
Перед этим удалите существующие дубли, иначе команда не выполнится.
GROUP BY, HAVING и оконные функции разбирают в бесплатном курсе «Основы SQL» и на курсе «SQL для программистов».
15 дней назад
Никита Вихров






