Запрос MySql для удаления повторяющихся строк из таблицы в зависимости от некоторых полей столбца?

Имя моей таблицы фиктивное и содержит 6 столбцов, где ID, NAME, TIMESTAMP и другие 3 столбца.

Я хочу удалить повторяющиеся строки, чьи значения ID, NAME и TIMESTAMP совпадают с другими строками. Если есть несколько строк с одинаковыми значениями ID, NAME и TIMESTAMP, сохраните одну и удалите другие.


person Kalpataru Mallick    schedule 19.06.2013    source источник
comment
. . Что находится в остальных трех столбцах?   -  person Gordon Linoff    schedule 19.06.2013
comment
возможный дубликат Как найти/удалить повторяющиеся записи в та же строка   -  person Ondra Žižka    schedule 19.06.2013
comment
любые 3 столбца, которые не требуют рассмотрения для дублирования.   -  person Kalpataru Mallick    schedule 19.06.2013


Ответы (2)


Вот решение

https://stackoverflow.com/a/5016434

Другое возможное решение, с которым я только что столкнулся:

DELETE n1 FROM names n1, names n2 WHERE n1.id > n2.id AND n1.name = n2.name

если вы хотите сохранить строку с наименьшим значением идентификатора ИЛИ

DELETE n1 FROM names n1, names n2 WHERE n1.id < n2.id AND n1.name = n2.name

https://stackoverflow.com/a/5770309

DELETE DupRows.*
FROM MyTable AS DupRows
   INNER JOIN (
      SELECT MIN(ID) AS minId, col1, col2
      FROM MyTable
      GROUP BY col1, col2
      HAVING COUNT(*) > 1
   ) AS SaveRows ON SaveRows.col1 = DupRows.col1 AND SaveRows.col2 = DupRows.col2
      AND SaveRows.minId <> DupRows.ID;
person sravis    schedule 19.06.2013

Вот пример кода. Что поможет вам в этом.

DELETE duplicate_rows.*
FROM dummy AS duplicate_rows
   INNER JOIN (
      SELECT MIN(id) AS id, name, timestamp
      FROM dummy
      GROUP BY session_id, user_id, category_id
      HAVING COUNT(*) > 1
   ) AS unique_rows 
ON unique_rows.session_id = duplicate_rows.session_id 
AND unique_rows.user_id = duplicate_rows.user_id
AND unique_rows.category_id = duplicate_rows.category_id
AND unique_rows.id <> duplicate_rows.id;

Более подробное объяснение вы найдете здесь: http://mildcoder.com/delete-duplicate-rows-from-a-mysql-table/

person Salsan Jose    schedule 29.07.2013