我有一个名为urls
它有以下字段
url
title (default null)
content (default null)
我的桌子有很多重复的行。
我想删除那些重复项。
例如
google.com - Google - search engine
google.com - null - null
google.com - Google - search engine
现在我想删除title = null
加上重复行的行。
我只希望网址是唯一的,没有重复的行。
有人可以告诉我怎么样?
答案 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);