Вывести, удалить повторяющиеся строки

06 Марта 2016
mysql

Простой метод:

SELECT `name` FROM `table` GROUP BY `name` HAVING COUNT(`name`)>1
  1. группируем таблицу выводя только уникальные значение GROUP BY `name`
  2. оставляем только те строчки значение которых встречаются более 1 раза HAVING COUNT(`name`)>1

Этот метод покажет только уникальные-повторяющиеся строки, то есть склеивая повторяющиеся строчки в одну, не учитывая остальные строки. Например, если вам нужно удалить все повторяющиеся строки:

DELETE FROM `table` GROUP BY `name` HAVING COUNT(`name`)>1

После выполнения удалятся строки, которые повторяются 1 раз, то есть чтобы удалить строчки которые повторяются 2 и более нужно выполнить данный запрос соответствующее количество раз.


Сложный метод:

DELETE `table` FROM `table`LEFT JOIN (SELECT max(`id`) as `id`, `name` FROM `table` GROUP BY `name`) t1 USING(`id`) WHERE t1.`id` IS NULL;
  1. создаем временную таблицу t1 и выводим максимальные значение столбца id по уникальному полю name и группируем по полю name (SELECT max(`id`) as `id`, `name` FROM `table` GROUP BY `name`) t1
  2. склеиваем с основной таблицей table и удаляем те строки которых нет в таблице