2008-10-31 3 views
2

В таблице у меня есть три столбца - id, name и count. Большое количество столбцов имен одинаково (из-за отсутствия UNIQUE на ранней стадии), и я хочу это исправить. Тем не менее, столбец id используется другими (4 или 5, я думаю, мне придется проверять документы), чтобы искать имя, и просто их удаление нарушит. Итак, есть ли хороший, чистый способ сказать «найти все идентичные записи и объединить их вместе»?Есть ли чистый способ очистки дубликатов записей в MySQL?

ответ

4

Такого рода вопрос приходит время от времени. Нет, нет действительно чистого способа сделать это. Вы должны изменить все строки в дочерней таблице, которые зависят от нежелательных значений в родительской таблице, прежде чем вы сможете устранить нежелательные строки в родительской таблице.

MySQL поддерживает несколько столов UPDATE и DELETE заявления (в отличие от других марок базы данных) и, таким образом Вы можете сделать некоторые довольно аккуратные трюки, как следующее:

UPDATE names n1 
    JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name) 
    JOIN child_table c ON (n2.id = c.id) 
SET c.name_id = n1.id 
ORDER BY n1.id DESC; 

После того, как вы сделали это по всему столу ребенка (ы), вы можете использовать синтаксис нескольких таблиц MySQL DELETE для удаления нежелательных строк в родительской таблице:

DELETE FROM n2 
    USING names n1 JOIN names n2 ON (n1.id < n2.id AND n1.name = n2.name); 
0

Почему вы не можете сделать что-то вроде

update dependent_table set name_id = <id you want to keep> where name_id in (
    select id from names where name = 'foo' and id != <id you want to keep>) 
Смежные вопросы