简体   繁体   English

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

[英]I want to delete all the duplicates row in a MySQL database but it freezes

whenever I try a deleting operation on my phpmyAdmin MySQL database it freezes saying 'Error 504' once I run the command.每当我在我的 phpmyAdmin MySQL 数据库上尝试删除操作时,一旦我运行该命令,它就会冻结并显示“错误 504”。

The operation is like the following:操作如下:

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 have a table with dozens thousands entries and I just want to keep those with the highest ID and removing the otherd having lowest ID+same place+same IP+same data.我有一个包含数十万个条目的表,我只想保留那些具有最高 ID 的条目,并删除具有最低 ID+相同地点+相同 IP+相同数据的其他条目。

You can try below - your joining alias is not right you are trying t2.download = t2.download and so on which is wrong您可以在下面尝试 - 您的加入别名不正确您正在尝试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

As per comments, if you can take the system off-line for a couple of minutes, then I'd do this:根据评论,如果您可以让系统离线几分钟,那么我会这样做:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM