MySQL-2百万级mysql一个表 怎么去掉重复的行

发布于 2016-10-17 13:47:47 字数 77 浏览 1271 评论 4

一个表有 7个字段,现在查询这个表中字段title值相同的行 并且删除多余的 行只留一行
请问怎么查询 效率高!
谢谢

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

虐人心 2017-09-26 22:10:48

先给下思路:
通过group by找出"重复标题","重复次数","最小ID"到临时表"tmptitle",然后根据"tmptitle"表中删除原表中的重复行,仅保留ID最小的重复标题行和未重复行。

具体操作如下:
1:备份表, 略.
2:建立临时表

 CREATE TABLE tmptitle(
sTitle varchar(512),
num int(10),
minid int(10)
);

3: 找出重复行(此为一条SQL语句)

 insert into tmptitle(sTitle,num,minid)
select sTitle,count(0) num,min(id) minid
from tTitle
group by sTitle
having num>1;

4: 删除重复行

 delete from tTitle
where exists(select sTitle from tmptitle where tmptitle.sTitle=tTitle.sTitle and id<>minid);

晚风撩人 2016-12-25 07:14:10

1、新增一个char 32位的字段
2、新增的字段update为md5(title)
3、在这个字段上或者直接delete
4、删除这个字段

瑾兮 2016-12-24 01:43:31

如果是我来做的话会可能会选择将不重复的数据导出然后在导入,例如下边两种方法:

1,导入然后改表名再导入:

mysqldump --default-character-set=utf8 -hloclahost -uroot -p db table -w "1 group title" > /tmp/xxx.sql

2,直接将不重复的数据复制到新表:

create table new_table (select * from old_table group by title)
--或者使用 insert into select ,这种方式需要先建好表

这种方式的好处就是不用删除原来的表的数据,可以先在新表中检查导入的数据是否正确

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文