从mysql表中删除重复的行

时间:2013-08-19 06:00:28

标签: mysql

我有一个名为urls

的mysql表

它有以下字段

url
title (default null)
content (default null)

我的桌子有很多重复的行。

我想删除那些重复项。

例如

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

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

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

有人可以告诉我怎么样?

3 个答案:

答案 0 :(得分:3)

这是最简单的:

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

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

答案 1 :(得分:0)

你可以添加url作为唯一索引。以下查询将添加唯一索引并删除deuplicates。

alter ignore table urls add unique index(url);

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

答案 2 :(得分:0)

    DELETE FROM urls WHERE title IS NULL 
           OR url IN (SELECT a.URL from urls a, urls b WHERE a.url=b.url);