Нахождение дубликатов в таблице SQL
Проблема: Как найти дубликаты по двум полям в SQL-запросе?
Я столкнулся с задачей поиска дубликатов в таблице пользователей по двум полям: email
и name
.
Проще всего находить дубликаты по одному полю, как показано в следующем запросе:
SELECT email, COUNT(email)
FROM users
GROUP BY email
HAVING COUNT(email) > 1
Для примера, у нас есть следующая таблица:
ID NAME EMAIL
1 John [email protected]
2 Sam [email protected]
3 Tom [email protected]
4 Bob [email protected]
5 Tom [email protected]
Этот запрос вернёт пользователей, имеющих одинаковый email
, и в данном случае это будут John, Sam и два Tomа, так как у них одно и то же значение email
.
Однако, моя цель – найти дубликаты, где значения по полям email
и name
совпадают. То есть, мне необходимо получить только "Tom" и "Tom".
Причина, по которой я это делаю, заключается в том, что я допустил ошибку и разрешил вставку дубликатов значений name
и email
. Сейчас мне нужно удалить или изменить дубликаты, поэтому сначала мне необходимо их найти.
Каков правильный SQL-запрос для этой задачи?
Удалить дублирующиеся строки, сохранив первую строку
Как выполнить SELECT DISTINCT по нескольким столбцам?
Получить строки с максимальным значением в одном столбце для каждого уникального значения другого столбца
Как восстановить дамп-файл из mysqldump?
Как оператор GROUP BY обрабатывает значения NULL?