日期:2014-05-16  浏览次数:20890 次

mysql表去掉重复记录 不会求帮助
有一个mysql统计表A表(id为自增字段),表结构和数据如下:

id name score
1 zz 60
2 ll 70
3 ww 80
4 ff 90
5 zz 60
6 ww 80


问题来了:表里面有两条重复的记录(id号为1和5的重复,id号为3和6的重复)
现在如何通过一条sql语句 让重复的记录去掉,最终我需要的结果为:
id name score
1 zz 60
2 ll 70
3 ww 80
4 ff 90



备注说明:数据重复的只是举例列举了两条 其实这个表里存在重复记录的量很多而且不定,
恳求各位大牛帮看下 如何通过sql语句将重复的记录去掉,跪谢!祝好人一生平安

------解决方案--------------------
delete a from tt a inner join tt b on a.name=b.name and a.score=b.score and a.id>b.id
------解决方案--------------------
如果非要一条sql删除

delete from tb where id in(
select min(id) as id
from tb
group by name,score);

不过效率很低
------解决方案--------------------
or
SELECT a.`name`,a.`score`,MIN(a.`id`) FROM ttp4 a GROUP BY a.`name`,a.`score`

在NAME、SCORE、ID上建立索引
------解决方案--------------------
探讨

引用:

delete a from tt a inner join tt b on a.name=b.name and a.score=b.score and a.id>b.id

大哥 看不懂你的语句的 我一共只有1张表的
而且你的语句 我看了 tt a inner join tt b ,我觉得这里有错误 是不是大哥哪里写错了 或者理解错了

------解决方案--------------------
这是自连接查询,自行修改一下,在我SQL语句中,A、B为TT表的别名
delete a1 from a a1 inner join a b1 on a1.name=b1.name and a1.score=b1.score and a1.id>b1.id
------解决方案--------------------
OR

给出真实数据测试

贴建表及插入记录的SQL
------解决方案--------------------
A1、B1都为表A的别名,自连接查询,对本表进行操作


select * from a a1 inner join a b1 on a1.name=b1.name and a1.score=b1.score and a1.id>b1.id
看看结果