MySQL. Убираем дубликаты строк

Под дубликатами в данном случае имеются ввиду строки, содержащие одинаковые данные в некоторых полях. К примеру, у вас есть текстовое поле txt, в котором могут быть строки с одинаковым значением. И таких строк может быть много.

1 один
2 пять
3 восемь
4 один
5 три
...........
1001 один

Первым решением, казалось бы, назначить полю txt уникальный ключ. Но mySQL такие вещи не поддерживает. Решений данной проблемы несколько. Самое первое из них - не допустить попадания одинаковых строк в БД. Второе решение - это использование временных таблиц:

CREATE TEMPORARY TABLE IF NOT EXISTS temp_table(`id` int(10)) ENGINE=MEMORY;
TRUNCATE TABLE temp_table;
INSERT INTO `temp_table` (SELECT MIN(id) as id FROM `table` GROUP BY `txt`);
DELETE FROM `table` WHERE `id` NOT IN (SELECT `id` FROM `temp_table`);

Выполняется 4 запроса: создаем временную таблицу, очищаем ее (на всякий случай), заносим в нее id только уникальных записей и удаляем из основной таблицы записи с теми id, которые не попали во временную. Третье решение довольно изящное, но работает быстро только для таблицы с небольшим количеством записей.

DELETE t1 FROM `table` t1, `table` t2 WHERE t1.txt=t2.txt AND t1.id > t2.id

Мы просто делаем JOIN таблицы на саму себя по условию равенства полей, удаляя записи с большим id Вот, собственно и все, что хотелось сказать по этому поводу.

Интересное

Git и Bitbucket
Git – это распределенная система контроля версий. Пожалуй, на этом теория заканчивается, так как...
Project Glass — Очки будущего от Google
Компания Google представила суперсовременные «очки дополненной реальности» или Project Glass. Впрочем,...
Отзыв о FirstVDS
При покупке хостинга у FirstVDS мне предложили скидку за годный отзыв в блоге или на форуме....
Проверка сайта на вирусы
Если пользоваться привычной терминологией, то web вирусы не являются вирусами в традиционном...

Комментарии

    Чтобы оставлять комментарии, авторизируйтесь

    Войти через OpenID

    рейтинг2+-
    Популярные
    Точки входа
    Наверх