Удаление дубликатов в MySQL

0

Украл статью отсюда http://mojbred.com/706.html

Для меня штука полезная очень. Пользуюсь последним методом

Оказывается, удалить дубликаты в SQL можно запросом с простым JOIN таблиц самой на себя:

DELETE t1 FROM sys_users t1, sys_users t2 WHERE t1.login=t2.login AND t1.ID > t2.ID

Этот запрос, если его соответствующим образом модифицировать, вполне будет работать и в MySQL, что меня, кстати, весьма удивило, ибо я ни разу не видел такого решения для удаления дубликатов, хотя нужда в этом действительно возникает достаточно часто. Обычно либо используют несколько запросов, создавая временные таблицы, либо тупо делают новую таблицу с помощью SELECT DISTINCT, потом переименовывают, удаляя старую, либо насильно навешивают уникальный ключ ALTER IGNORE TABLE table_name ADD UNIQUE INDEX (field_name) (при этом дубликаты удаляются автоматически).

На место ID нужно поставить любой уникальный ключ, который всегда есть в таблице. При этом не обязательно, чтобы ключ был автоинкрементный или вообще числовой, он вполне может быть и текстовым, сравнение «>» все равно будет работать. В общем виде запрос выглядит так:

DELETE table_name FROM table_name as table1,table_name as table2 WHERE table1.field_name=table2.field_name AND table1.unique_key>table2.unique_key

Я, правда, не уверен, что это будет работать во всех версиях MySQL, но у меня в 4й работает.

UPD: Тут реально удалял чуть более сложным запросом, понадобилось написать так:

DELETE table1 FROM zzz as table1,zzz as table2 WHERE table1.x=table2.x AND table1.y=table2.y AND table1.unique_id>table2.unique_id

Где zzz – имя таблицы, x и y – поля, которые мне надо было чтобы были парно уникальны. Основная разница с запросом, приведенным первым, в том, что пока не поставил «DELETE table1″ вместо «DELETE zzz» – не работало. Учтите.

Метки:


| | Еще

Просмотров: 62

Похожие записи:

    Оставить комментарий


    WebComplIT banner
    © 2008-2010 EasyWeb.org.ua. All rights reserved.