Я хочу удалить все строки дубликатов в базе данных MySQL, но он зависает - PullRequest
0 голосов
/ 07 марта 2019

всякий раз, когда я пытаюсь выполнить операцию удаления в моей базе данных phpmyAdmin MySQL, после запуска команды она останавливается со словом «Ошибка 504».

Операция выглядит следующим образом:

DELETE t1 FROM downloads t1
        INNER JOIN
    downloads t2
WHERE
    t1.ID < t2.ID AND t2.download = t2.download AND t2.place = t2.place AND t2.IP = t2.IP AND t2.data = t2.data

Iу меня есть таблица с десятками тысяч записей, и я просто хочу сохранить те, у кого самый высокий идентификатор, и удалить другой, имеющий самый низкий идентификатор + то же место + тот же IP + те же данные.

Ответы [ 2 ]

0 голосов
/ 07 марта 2019

Согласно комментариям, если вы можете отключить систему на пару минут, я бы сделал это:

-- After making a backup of downloads...

CREATE TABLE new_downloads AS
SELECT a.* 
  FROM downloads a
  JOIN 
     ( SELECT MAX(id) id
         FROM downloads 
        GROUP 
           BY download
            , place
            , IP
            , data 
     ) b
    ON b.id = a.id;

ALTER TABLE new_downloads ADD PRIMARY KEY (ID);
-- add any other indexes as required

DROP TABLE downloads;

ALTER TABLE new_downloads RENAME TO downloads;
0 голосов
/ 07 марта 2019

Вы можете попробовать ниже - ваш псевдоним присоединения неверен, вы пытаетесь t2.download = t2.download и т. Д., Что неправильно

DELETE t1
FROM downloads t1
INNER JOIN downloads t2
WHERE t1.ID < t2.ID
  AND t1.download = t2.download
  AND t1.place = t2.place
  AND t1.IP = t2.IP
  AND t1.data = t2.data
...