• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > MySQL 删除数据库中重复数据方法小结

MySQL 删除数据库中重复数据方法小结

作者: 字体:[增加 减小] 来源:互联网 时间:2017-05-11

通过本文主要向大家介绍了mysql数据库数据类型,mysql数据库插入数据,mysql数据库添加数据,mysql数据库导入数据,mysql数据库修改数据等相关知识,希望本文的分享对您有所帮助

刚开始,根据我的想法,这个很简单嘛,上sql语句

delete from zqzrdp where tel in (select min(dpxx_id) from zqzrdp group by tel having count(tel)>1);
</div>

执行,报错!!~!~

异常意为:你不能指定目标表的更新在FROM子句。傻了,MySQL 这样写,不行,让人郁闷。

难倒只能分步操作,蛋疼

以下是网友写的,同样是坑爹的代码,我机器上运行不了。

1. 查询需要删除的记录,会保留一条记录。

select a.id,a.subject,a.RECEIVER from test1 a left join (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b on a.id< b.bid where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid
</div>

2. 删除重复记录,只保留一条记录。注意,subject,RECEIVER 要索引,否则会很慢的。

delete a from test1 a, (select c.subject,c.RECEIVER ,max(c.id) as bid from test1 c where status=0 GROUP BY RECEIVER,SUBJECT having count(1) >1) b where a.subject=b.subject and a.RECEIVER = b.RECEIVER and a.id < b.bid;

</div>

3. 查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

select * from people where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

</div>

4. 删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录

delete from people where peopleId in (select peopleId from people group by peopleId  having count(peopleId) > 1) and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
</div>

5.删除表中多余的重复记录(多个字段),只留有rowid最小的记录

delete from vitae a where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1) and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
</div>

看来想偷懒使用一句命令完成这个事好像不太显示,还是老老实实的分步处理吧,思路先建立复制一个临时表,然后对比临时表内的数据,删除主表里的数据

alter table tableName add autoID int auto_increment not null; 

create table tmp select min(autoID) as autoID from tableName group by Name,Address; 

create table tmp2 select tableName.* from tableName,tmp where tableName.autoID = tmp.autoID; 

drop table tableName; 

rename table tmp2 to tableName; 
</div>


</div>
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • MySQL数据库InnoDB数据恢复工具的使用小结详解
  • mysql 本地数据库如何从远程数据库导数据
  • 让MySQL数据库跑的更快 为数据减肥
  • MySQL 数据类型 大全
  • MySQL 数据类型和建库策略
  • MySQL 删除数据库中重复数据方法小结

相关文章

  • 2018-12-05mysql主从设置_MySQL
  • 2017-05-11MySQL 添加、修改、删除表的列及约束等表的定义
  • 2017-05-11在MySQL中创建带有IN和OUT参数的存储过程的方法
  • 2018-12-05MYSQL使用cmd命令修改root密码总结
  • 2018-12-05数据库分页存储过程代码
  • 2018-12-05如何解决ORA-01843与NLS_DATE_FORMAT问题
  • 2017-05-11如何通过SQL找出2个表里值不同的列的方法
  • 2018-12-05SQL实现根据类型对金额进行归类
  • 2018-12-05Oracle与Mysql主键、索引及分页的区别小结
  • 2018-12-05MySQL优化之缓存优化详解(一)

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL中权限管理的详图介绍
    • mysql中如何使用正则表达式查询
    • MySQL中计算索引长度的详情
    • MySQL Group Replication 介绍
    • MySQL中error_log介绍
    • PHP操作MongoDB技術總結
    • sql2005 远程连接问题解决方法
    • 使用mysqldump命令实例详解
    • SQL中object_id函数的用法
    • mysql性能优化之max,count优化

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有