前几天在做大众菜网站时,意外生成了大量重复记录. 除id,time字段外,其它都是相同, 有的一条记录重复二次,有三条.最多十五条记录. 参看了百度,MSDN官网,感觉太麻烦了,步骤至少也有四五步,其中不小心错了一步都有可能被老板K了.后来自己试着写写,倒想出了一个简便SQL.delete from table where id in(SELECT min(ID) as id FROM table group by title having count(*)>1)OK,就这么简单. 删除title重复1次以上的记录。
运行一次,它删除一次,相同5条重复记录就会变成4条。我的最多重复15条,所以只要运行15次,(msql只要按F5就可以了,^_^).如果你不知道最多重复多少条记录也没关系,只要你一直运行,直到最后返回(0 row(s) affected)就对了.PS:在Mysql里要把中间那个查询要写到视图(view_name)里去,然后执行delete from table where id in(select id from view_name),为什么不能组合。我也不知道。好了,继续做我的大众菜
我快没分了...20分 

解决方案 »

  1.   

    可以把数据库整个导入一个临时表中
    建立临时表的时候,把不允许重复的键设置为主键
    主键不重复,也就不会插入重复记录了
    一切完毕后,drop掉原来的表,把这个表名字改过去
      

  2.   


    delete from table t1
    where exists
    (select 1 from table where id<t1.id and title=t1.title);
      

  3.   

    delete和select的表名不可以是同一个的
      

  4.   

    谢谢wenq0917提醒,我没做测试,大意了。delete t1 from test t1,test t2
    where t1.id>t2.id and t1.title=t2.title;