mysql如何删除重复记录

本文介绍了一种在MySQL中删除重复记录的有效方法。通过使用子查询和派生表的方式,避免了直接在同一表上进行更新和选择操作所导致的问题。文中提供了具体的SQL语句实例。
方法有很多,除了最简便的,

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“。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值