Сведения о вопросе

Gaukhar

00:38, 25th August, 2020

Теги

MySQL    

MYSQL. Удалить дубли строк?

Просмотров: 312   Ответов: 9

Есть таблика с 100.000 строк.

Нужно удалить дубли строк(именно строк а не ячеек)

то есть чтобы от таблицы:

c1 c2

1 2

1 0

4 2

1 0

1 1

2 1


Осталось:

c1 c2

1 2

1 0

4 2

1 1

2 1


Одну строчку (1 0) нужно удалить так как из было 2.

Можно ли это сделать запросом или без php не обойтись?

Спасибо.



  Сведения об ответе

appple

05:43, 10th August, 2020

CREATE TEMPORARY TABLE tmp_tab AS SELECT DISTINCT * FROM your_table;

DELETE FROM your_table;

INSERT INTO your_table SELECT * FROM tmp_tab;

DROP TABLE tmp_tab;


  Сведения об ответе

LAST

04:16, 17th August, 2020

CREATE TABLE `table_tmp` SELECT DISTINCT * FROM `table`;
DROP TABLE `table`;
RENAME TABLE `table_tmp` TO `table`;


  Сведения об ответе

pumpa

05:16, 7th August, 2020

Можно еще ALTER IGNORE TABLE bzzz add unique index tmp(column1, column2)


  Сведения об ответе

lourence

02:26, 18th August, 2020

Мне помог вот такой вариант:
ALTER IGNORE TABLE table1 ADD UNIQUE KEY(Name2, Name3);


  Сведения об ответе

SEEYOU

15:42, 26th August, 2020

Добавьте первичный ключ (id) а потом:

DELETE FROM table as me, table as clone WHERE me.c1 = clone.c1 AND me.c2 = clone.c2 AND me.id < clone.id

Проверено — работает, если я правильно понял задачу.


  Сведения об ответе

JUST___

20:02, 21st August, 2020

Мне нравится такой способ:
Создаем таблицу dst с той же структурой, но добавляем цифровое поле DupCount

делаем запрос:
INSERT INTO dst SELECT * FROM src ON DUPLICATE KEY UPDATE dst.DupCount = dst.DupCount +1

DupCount для каждой строки будет содержать число встретившихся повторов.

Можно написать скрипт, который будет создавать таблицу dst, копировать таким образом туда данные, удалять исходную таблицу и переименовывать dst в src.


  Сведения об ответе

DINO

21:44, 2nd August, 2020

  Сведения об ответе

park

07:19, 12th August, 2020

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


  Сведения об ответе

SSESION

06:59, 4th August, 2020

Создайте составной первичный (или просто уникальный) индекс на c1 и c2 поля.


Ответить на вопрос

Чтобы ответить на вопрос вам нужно войти в систему или зарегистрироваться