mysql如何删除重复记录


方法有很多,除了最简便的,

alter ignore table 表名 add UNIQUE index(字段名);

然后再将索引drop掉,这个方法外。

更加中规中矩的方法也是有的。。

比如我在网上搜到的:

deletefrompeople
wherepeopleIdin(selectpeopleIdfrompeoplegroupbypeopleIdhavingcount(peopleId)>1)
and idnotin(selectmin(id)frompeoplegroupbypeopleIdhavingcount(peopleId)>1)

这个看起来好像很有道理,但是执行的时候就会报错。。You can't specify target table 'people' for update in FROM clause。

原因就是上面的那一条SQL,删除和查询操作都是针对同一张表的。。MYSQL是不允许这样做滴。

这样就可以了

deletefrompeople
wherepeopleIdin(selectpeopleIdfrom(select id,peopleId from people) as a groupbypeopleIdhavingcount(peopleId)>1)
and idnotin(selectmin(id)from (select id,peopleId from people) as b groupbypeopleIdhavingcount(peopleId)>1)

简单一点的可以这样写

delete from id where Id not in (select min(Id) from(select id,peopleId from people)as a GROUP by peopleId );

粗体部分就是把一张表转换成了一个提取表(derived table),从而解决了问题,需要注意的是后面那个as 别名,不能省略,否则会报错"Every derived TABLE must have its own alias“。

优质内容筛选与推荐>>
1、一瞬间-自定义一个漂亮的日期控件
2、[dojo] 解决传中文的乱码问题
3、.NET设计模式(11):组合模式(Composite Pattern)
4、DataRelation For Access DataBase
5、VMWare竞争的产品: 介绍Microsoft Virtual Server 2005 R2给大家吧


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号