0

我有一个名为的 mysql 表urls

它有以下字段

url
title (default null)
content (default null)

我的表有很多重复的行。

我想删除那些重复项。

例如

google.com - Google - search engine
google.com - null - null
google.com - Google - search engine

现在我想删除行title = null加上重复行。

我只希望 url 是唯一的,没有重复的行。

有人能告诉我怎么做吗?

4

3 回答 3

3

这是最简单的:

create tableB like tableA;
INSERT INTO tableB SELECT DISTINCT * FROM tableA WHERE title IS NOT NULL;
DROP tableA;
RENAME tableB TO tableA;

即使在生产环境中,删除和重命名通常也足够快,几乎不会被任何用户看到。仔细检查以确保最终得到适当的索引。

于 2013-08-19T06:18:01.350 回答
0
    DELETE FROM urls WHERE title IS NULL 
           OR url IN (SELECT a.URL from urls a, urls b WHERE a.url=b.url);
于 2013-08-19T06:26:18.457 回答
0

您可以添加 url 作为唯一索引。以下查询将添加唯一索引并删除重复数据。

alter ignore table urls add unique index(url);

如果您不想添加唯一索引,那么替代方法是创建一个具有唯一索引的临时表,复制数据,删除重复项并转移回原始表。

于 2013-08-19T06:15:53.093 回答