Как удалить дубликаты в таблице MySQL?

Здравствуйте, есть таблица guild_users в ней есть поля:
user_id, user_money, user_description, user_lvl, user_xp, lastMessage, user_warns, user_warn_reasons, user_private_role, user_exception, Time, strTime, startTime, endTime, user_timelvl, user_timexp

Необходимо удалить дубликаты
  • Вопрос задан
  • 238 просмотров
Решения вопроса 1
@mletov
1) Добавьте поле id, неудобно же без уникального идентификатора работать
2) Версия MySql должна быть достаточно свежей и поддерживать оконный функции

Предварительно забэкапьтесь

DELETE FROM guild_users
WHERE id
NOT IN
(
	SELECT id
	FROM
	(
		SELECT id,
			   ROW_NUMBER(PARTITION BY user_id, user_money, user_description, user_xp, lastMessage, user_warns, user_warn_reasons, user_private_role, user_exception, Time, strTime, startTime, endTime, user_timelvl, user_timexp ORDER BY user_lvl DESC) AS rn
		FROM guild_users
	) AS t1
	WHERE rn = 1
)
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
@VitalyChaikin
DELETE FROM guild_users gu 
INNER JOIN (
SELECT <Список полей по которым определяется дубль>, COUNT(*)
FROM guild_users
GROUP BY <Список полей по которым определяется дубль>
HAVING COUNT(*) > 1) guDubles on 
guDubles.Поле1 = gu.Поле1 AND
guDubles.Поле2 = gu.Поле2 AND ...  <Список полей по которым определяется дубль>
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы