mysql如何删除重复记录
方法有很多,除了最简便的,
alter ignore table 表名 add UNIQUE index(字段名);
然后再将索引drop掉,这个方法外。
更加中规中矩的方法也是有的。。
比如我在网上搜到的:
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)
and id not in (select min(id) from people group by peopleId having count(peopleId )>1)
这个看起来好像很有道理,但是执行的时候就会报错。。You can't specify target table 'people' for update in FROM clause。
原因就是上面的那一条SQL,删除和查询操作都是针对同一张表的。。MYSQL是不允许这样做滴。
这样就可以了
delete from people
where peopleId in (select peopleId from(select id,peopleId from people) as a group by peopleId having count(peopleId) > 1)
and id not in (select min(id) from (select id,peopleId from people) as b group by peopleId having count(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“。
相关文章
- MySQL报错ERROR 1615 (HY000): Prepared statement needs to be re-prepared
- mysql: unknown variable 'character-set-client=utf8'
- python如何连接mysql数据库
- MySQL配置文件mysql.ini参数详解、MySQL性能优化
- PHP实现Mysql网站安装程序制作
- MySQL中, 如何查询某一天, 某一月, 某一年的数据.
- 如何把数据从 Mysql 导入到 Greenplum
- MySQL 索引 是如何提高 查询效率 的?
- MySQL性能优化(五)undo log是如何实现MVCC的?
- MySQL数据库加密和解密~认证登陆密码(mysql.user)和MySQL不区分大小写
- CentOS7安装MySQL冲突和问题解决小结
- 10·24【运维工程师也过节】【运维MySQL大礼包】
- Innodb中mysql如何快速删除2T的大表
- MySQL如何实现万亿级数据存储?
- 如何测试mysql是否安装成功
- 如何实现MySQL表数据随机读取?从mysql表中读取随机数据