有一个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语句将重复的记录去掉,跪谢!祝好人一生平安

解决方案 »

  1.   

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

  2.   

    不用删除  显示出不重复的就可以吧
    select *
    from tb A
    where not exists (select 1 from tb Bwhere A.name=B.name and A.score=B.score and A.id>B.id)
      

  3.   

    如果非要一条sql删除delete from tb where id in(
    select min(id) as id
    from tb
    group by name,score);不过效率很低
      

  4.   

    or
    SELECT a.`name`,a.`score`,MIN(a.`id`) FROM ttp4 a GROUP BY a.`name`,a.`score`在NAME、SCORE、ID上建立索引
      

  5.   

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

  6.   

    在MYSQL5下测试 没有问题,看看MYSQL的HELP吧,
    OR
    给出真实数据测试
    贴建表及插入记录的SQL,及要求结果出来看看
      

  7.   

    你的语句不用说 测试通不过 我新建了一个test数据库 并在test下新建了a表 用测试数据测试过了你的语句报错:#1146 - Table 'test.tt' doesn't exist如果改成这条语句:delete a from a inner join b on a.name=b.name and a.score=b.score and a.id>b.id
    测试结果报错信息:#1146 - Table 'test.b' doesn't exist还望大牛们给条能直接解决的不用修改的sql语句 因为小弟比较菜 继续跪谢
      

  8.   

    这是自连接查询,自行修改一下,在我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
      

  9.   

    OR给出真实数据测试贴建表及插入记录的SQL
      

  10.   

    谢谢 测试确实可以得到正确结果了
    能烦请小解释下a1
    a a1
    a b1
    什么意思吗
      

  11.   

    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
    看看结果
      

  12.   

    上面的a a1    a b1
    与 a as a1    a as b1
    结果是一样的是不是a as b 都可以写成a b啊?