在MYSQL中删除非常非常相似的行

时间:2012-08-16 18:22:29

标签: mysql sql

在PHPMYAdmin中,我正在运行网络爬虫。网络爬虫偶尔会拿起相同的网址。在网络爬虫中,它已经索引了数千个链接,我不想要重复的链接。有没有办法删除SQL中的类似行(唯一的区别是id字段)

2 个答案:

答案 0 :(得分:1)

您可以DELETE除最大ID(最近)之外的所有网址:

DELETE    a 
FROM      tbl a
LEFT JOIN (
          SELECT   MAX(id) AS id 
          FROM     tbl 
          GROUP BY url
          ) b ON a.id = b.id
WHERE     b.id IS NULL

执行此操作后,在url字段上设置唯一约束可能是个好主意:

ALTER TABLE tbl ADD UNIQUE idx_unique_url (url); 

答案 1 :(得分:0)

如果您的表名为the_table且其字段为id(唯一字段)和url,那么您可以写:

DELETE
  FROM the_table
 WHERE id NOT IN
        ( SELECT *
            FROM ( SELECT MIN(id)
                     FROM the_table
                    GROUP BY url
                 ) t
        )
;

(如果您还有其他字段,并且只想删除除<{1}}之外所有字段相同的行,则只需将这些字段添加到id子句中以及GROUP BY。)