MySql - удалить дубликаты из таблицы - PullRequest
2 голосов
/ 26 августа 2011

У меня есть таблица на моем сервере MySql со следующими столбцами: ID (int, key), тип (int), name (varchar).

Из-за ошибки в моем приложении дублирующиеся записи быливставлен в БД, я хочу удалить эти записи, чтобы из каждой пары типа и имени была только одна строка.

есть мысли о том, как это сделать?

Ответы [ 4 ]

1 голос
/ 26 августа 2011

Это зависит от того, что вы хотите сохранить и что вы хотите удалить. Поскольку ID является ключом, я предполагаю, что нет повторяющихся идентификаторов, но есть дублированные пары тип / имя. Итак, вот идея, как их удалить:

delete from my_table t1
where exists (select 1 
                from my_table t2
               where t2.type = t1.type
                 and t2.name = t1.name
                 and t2.id < t1.id)

Это сохранит «дубликат» с самым низким ID

                 and t2.id > t1.id

Это будет держать "дубликат" с самым высоким ID

0 голосов
/ 27 августа 2011

В итоге я воспользовался решением из этого поста: http://www.justin -cook.com / wp / 2006/12/12 / remove-duplicate-records-columns-a-mysql-database-table /

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

Спасибо всем.

0 голосов
/ 26 августа 2011

Вам нужно выделить отчет в новой таблице, затем удалить старую таблицу и переименовать новую таблицу. Но есть много способов сделать это:

Какой лучший способ дедупликации таблицы?

0 голосов
/ 26 августа 2011

Очевидно, сначала измените этот запрос на оператор выбора, чтобы убедиться, что для удаления выбраны правильные записи:

delete from table as t1
using table as t2
where t1.type = t2.type and t1.name = t2.name and t1.id > t2.id
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...