Найти дублированные строки и обновить их
У меня есть много дублированных строк в моей базе данных, я хочу отредактировать их все, поэтому я пишу такой запрос, чтобы найти все дублированные строки
SELECT a.journal_id
, a.article_id
, a.submission_file_id
, a.editor_file_id
FROM articles_migration a
JOIN
( SELECT submission_file_id
FROM articles_migration
GROUP
BY submission_file_id
HAVING COUNT(article_id) >1
)temp
ON a.submission_file_id = temp.submission_file_id
этот запрос возвращает 1170 записей, которые дублируются! но теперь я хочу удалить какие записи, которые имеют тот же journal_id для этой цели
journal_id article_id submission_file_id editor_file_id
16 845 1848 2402
16 6409 1848 2402
54 5317 1848 2402
на первом шаге я должен удалить одну из строк, у которых journal_id имеет такое же значение, например, строки 1 или 2, а на шаге 2 я должен получить такой результат:
journal_id article_id submission_file_id editor_file_id
16 845 1848 2402
54 5317 1848 2402
поэтому я хочу обновить одну строку с этой формулой: значение submission_file_id => (значение * 10000)
и, наконец, я должен иметь такой результат
journal_id article_id submission_file_id editor_file_id
16 845 1848 2402
54 5317 18480000 2402
заранее спасибо
1 ответ
Это правильный ответ
DELETE a FROM articles_migration as a INNER JOIN articles_migration as b ON a.submission_file_id = b.submission_file_id and a.journal_id = b.journal_id WHERE a.article_id < b.article_id
Приведенный выше код удаляет повторяющиеся строки, и теперь я должен обновить их
update articles_migration as t1 inner join articles_migration as t2 on (t1.submission_file_id = t2.submission_file_id) and t1.article_id <> t2.article_id set t1.submission_file_id=(t1.submission_file_id * 1000);