0

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

4

2 回答 2

1

DELETE除了具有最大 id 的 URL(最新)之外,您可以使用所有 URL:

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); 
于 2012-08-16T18:38:09.190 回答
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
        )
;

(如果您还有其他字段,并且只想删除除 之外的所有字段都相同的行id,那么只需将这些字段与GROUP BY一起添加到子句中url。)

于 2012-08-16T18:35:28.223 回答