我想删除MySQL数据库中的所有重复行,但是冻结

时间:2019-03-07 11:38:25

标签: mysql duplicates

每当我在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

我有一个包含成千上万个条目的表,我只想保留那些ID最高的表,而删除ID最低的+相同的地方+相同的IP +相同的数据。

2 个答案:

答案 0 :(得分:0)

您可以在下面尝试-您的加入别名不正确,您正在尝试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

答案 1 :(得分:0)

根据评论,如果您可以让系统离线几分钟,那么我会这样做:

-- 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;