Удаление дубликатов данных из многих строк в MySQL? - PullRequest
1 голос
/ 22 марта 2012

Я веб-разработчик, поэтому мне не хватает моих знаний о работе с массовыми данными.

Сотрудник ищет решение наших проблем с данными.У нас есть таблица из примерно 400 тыс. Строк с перечисленными названиями компаний.

Кто бы это ни разрабатывал, он не понимал, что для компании нужен какой-то уникальный идентификатор, поэтому есть дубликаты записей для названий компаний.1006 * Какой метод можно использовать для сопоставления всех этих записей по названию компании и удаления дубликатов на основе каких-то критериев (другой столбец)

Я думал написать сценарий для этогов php, но мне действительно трудно поверить, что мой скрипт сможет выполняться при сравнении многих строк.Любой совет?

Ответы [ 3 ]

0 голосов
/ 22 марта 2012

Чтобы найти список компаний с дубликатами в вашей таблице, вы можете использовать такой скрипт:

SELECT NAME
FROM companies
GROUP BY NAME
HAVING COUNT(*) > 1

И последующее удалит все дубликаты, кроме содержащих максимальные значения в столбце col

DELETE del
FROM companies AS del
INNER JOIN (
    SELECT NAME, MAX(col) AS col
    FROM companies
    GROUP BY NAME
    HAVING COUNT(*) > 1
) AS sub
    ON del.NAME = sub.NAME AND del.col <> sub.col
0 голосов
/ 22 марта 2012

Ответ: Происхождение ответа

1) удалить из таблицы1

2) ИСПОЛЬЗОВАНИЕ table1, table1 как vtable

3) ГДЕ (НЕ table1.ID> vtable.ID)

4) И (table1.field_name = vtable.field_name)

  1. Здесь вы говорите mysql, что есть таблица1.
  2. Затем вы сообщаете ему, что будете использовать table1 и виртуальную таблицу со значениями table1.
  3. Это позволит mysql не сравнивать запись с самой собой!
  4. Здесь вы говорите, что не должно быть записей с одинаковым именем поля.
0 голосов
/ 22 марта 2012

То, как я делал это в прошлом, - это написать запрос, который возвращает только нужный мне набор (обычно используя DISTINCT + подзапрос для определения правильной записи на основе других значений), и вставить его в другую таблицу,Затем вы можете удалить старую таблицу и переименовать новую в старое имя.

...