Удалить дублированные строки из базы данных - PullRequest
3 голосов
/ 08 октября 2010

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

Пример:

id| field_one | field_two |
1 | 0000000   | 11111111  |
2 | 2222222   | 33333333  |
3 | 2222222   | 33333333  |
4 | 4444444   | 55555555  |

Мне нужно удалить строку с идентификатором 2 (или 3, независимо от того, что они равны, но не оба). Спасибо за любую помощь

Ответы [ 4 ]

4 голосов
/ 08 октября 2010
delete from the_table where id in
   (select max(id) from the_table
      group by field_one, field_two
      having count(*) > 1)

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

3 голосов
/ 08 октября 2010

Сначала выберите все отдельные строки, а затем удалите остальные:

DELETE FROM MyTable 
WHERE id NOT IN
      (
        SELECT MAX(id) FROM MyTable
        GROUP BY field_one, field_two
      )
2 голосов
/ 08 октября 2010
set rowcount 1 
delete userTbl1 from userTbl1 a1 where (select count(UName) from userTbl1 a2 where a2.UName =a1.UName)>1
while @@rowcount > 0 
delete userTbl1 from userTbl1 a1 where (select count(UName) from userTbl1 a2 where a2.UName =a1.UName)>1
set rowcount 0
1 голос
/ 08 октября 2010

Ответ Тило полезен, он просто делает то, что вы хотите. В любом случае, если у вас много строк, это может занять много времени, поскольку алгоритм имеет квадратную сложность. Если бы я был тем, кто спросил, я бы выбрал ответ Тило как лучший ответ, в любом случае, я просто хочу дать вам другой вариант: если у вас много строк, тогда другая возможность:

создайте новую таблицу, установите УНИКАЛЬНЫЙ ИНДЕКС для комбинации столбцов: (field_one, field_two) и скопируйте содержимое первой таблицы в новую. Затем вы удаляете старый и переименовываете новый в старое имя таблицы.

Вот и все.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...