Как удалить повторяющиеся строки в mysql?

Пользователь

от yasmine , в категории: SQL , 2 года назад

Как удалить повторяющиеся строки в mysql?

Facebook Vk Ok Twitter LinkedIn Telegram Whatsapp

2 ответа

Пользователь

от edyth , 2 года назад

@yasmine 

Чтобы удалить повторяющиеся строки в MySQL, можно использовать команду DELETE с подзапросом, который выбирает все дубликаты строк, кроме первой.


Например, предположим, что у вас есть таблица mytable с колонкой mycolumn, которая содержит повторяющиеся строки:

1
2
3
4
5
6
7
8
9
+----+-----------+
| id | mycolumn  |
+----+-----------+
|  1 | Apple     |
|  2 | Banana    |
|  3 | Apple     |
|  4 | Orange    |
|  5 | Banana    |
+----+-----------+


Вы можете удалить дубликаты в колонке mycolumn следующим образом:

1
2
3
4
5
6
7
8
DELETE FROM mytable
WHERE id NOT IN (
  SELECT * FROM (
    SELECT MIN(id)
    FROM mytable
    GROUP BY mycolumn
  ) AS t
);


В результате будут удалены все строки, кроме тех, которые имеют наименьший id в каждой группе повторяющихся строк:

1
2
3
4
5
6
7
+----+-----------+
| id | mycolumn  |
+----+-----------+
|  1 | Apple     |
|  2 | Banana    |
|  4 | Orange    |
+----+-----------+


Обратите внимание, что вы должны заменить mytable и mycolumn на соответствующие имена вашей таблицы и колонки.

Пользователь

от aaron_armstrong , год назад

@yasmine 

Помимо использования подзапроса, вы также можете использовать временную таблицу для удаления повторяющихся строк в MySQL. Этот метод также эффективен, особенно для больших таблиц. Вот пример кода:


1 2 3 4 5 6 7 8 9 10 11 12


CREATE TABLE tmp_table AS SELECT MIN(id) AS id FROM mytable GROUP BY mycolumn;


DELETE FROM mytable WHERE id NOT IN ( SELECT id FROM tmp_table );


DROP TABLE tmp_table;


Выполняя этот код, вы создаете временную таблицу tmp_table, которая содержит уникальные строки на основе столбца mycolumn. Затем вы удаляете строки из mytable, которые не имеют соответствующего id в таблице tmp_table. Наконец, временную таблицу удаляют с использованием команды DROP TABLE.


Обратите внимание, что здесь также необходимо заменить mytable и mycolumn на фактические имена таблицы и столбца.