【数据库】MySQL删除表中重复数据
来源:互联网 发布:酒吧软件系统 编辑:程序博客网 时间:2024/05/21 15:41
表结构如下:
方法一(此方法需表包含唯一标识字段):
DELETEFROM PRINCIPALWHERE ID NOT IN ( SELECT * FROM ( SELECT ID FROM PRINCIPAL GROUP BY NAME, AGE, EMAIL ) AS T )
方法二(此方法需表包含唯一标识字段):
DELETEFROM PRINCIPALWHERE ID IN ( SELECT T.ID FROM ( SELECT A.ID FROM PRINCIPAL A LEFT JOIN ( SELECT ID FROM PRINCIPAL GROUP BY NAME, AGE, EMAIL ) B ON A.ID = B.ID WHERE B.ID IS NULL ) AS T )
方法三(此方法需表包含唯一标识字段):
DELETEFROMprincipalWHEREid IN (SELECTt.idFROM(SELECTa.idFROMprincipal aWHEREa.id > (SELECTmin(id)FROMprincipal bWHEREb. NAME = a. NAME)) AS t)
在表字段没有唯一标识时需要借助临时表,当然在Oracle中可借用rowid充当方法一、方法二的唯一标识来完成删除操作:
方法四(此方法无需表包含唯一标识字段):
/* 将过滤的数据放入临时表*/select distinct * into #tempfrom principal /*删除原表的数据*/delete from principal /*将甩选的数据插入原表*/insert principalselect *from #temp/*删除临时表*/drop table #tempselect * from principal
注意:
1.仔细看你可能怀疑方法一、方法二中多用了一层select,不过本人亲试过不加这一层select在MySQL中会报错(You can't specify target table 'PRINCIPAL' for update in FROM clause),在Oracle中应该没问题;
2.在网上可看到很多类似下面的删除重复的sql语句,但是自己看会发现逻辑是错误的
DELETEFROM principalWHERE id IN ( SELECT id FROM ( SELECT id, NAME, age, email FROM principal GROUP BY NAME, age, email HAVING count(*) > 1 ) t )/*这样的删除语句每次只能删除重复记录中的一条*/
0 0
- 【数据库】MySQL删除表中重复数据
- mysql 删除数据库表中重复记录
- Oracle数据库删除表中重复数据
- 关于MySql删除表中重复数据
- 删除数据库中重复数据
- 删除数据库中重复数据
- 数据库中删除重复数据
- 数据库中删除重复数据
- 数据库中删除重复数据
- MySQL 删除数据库中重复数据方法小结
- mysql 中删除重复数据
- mysql删除数据库表中重复数据(根据单个或多个字段)
- mysql删除数据库的重复数据
- 数据库中删除表中重复数据的一点心得
- Mysql删除数据库中重复的数据(多字段判断重复)
- MySQL中删除表中重复数据,只保留一条
- 删除数据库表中重复数据的总结(oracle)
- SQL语句删除数据库表中重复数据
- 【LeetCode】LeetCode——第1题:Two Sum
- mysql数据库修改数据表引擎的方法
- Mobile Detect:移动设备(手机和平板)检测的 PHP 类库
- aseozdpaseo 干什么用的
- 调整屏幕亮度的方法
- 【数据库】MySQL删除表中重复数据
- SSH 环境搭建(Spring3+Struts2+Hibernate3)
- (转)Java基本数据类型
- Objective-C类方法中使用self注意事项
- AngularJS 模块
- 数据库第四章第五章总结
- How to Record your Voice from the Microphone on Ubuntu/Linux Mint
- 【MySql学习心得】day one
- jQuery——自定义事件