
Oracle删除重复记录:实用SQL解决方案
下载需积分: 11 | 39KB |
更新于2024-09-21
| 100 浏览量 | 举报
收藏
"Oracle删除重复记录的多种方法"
在Oracle数据库中,删除重复记录是一个常见的需求,特别是在数据清洗和维护数据一致性时。以下是一些有效的SQL语句示例,用于定位并删除这些重复数据。
1. 用ROWID方法
ROWID是Oracle中的一个特殊属性,它唯一标识表中的每一行。此方法通过比较同一列值的ROWID来找出重复记录,并删除ROWID较小的记录。查询和删除语句如下:
- 查询重复记录:
```sql
SELECT * FROM table1 a WHERE ROWID != (SELECT MAX(ROWID) FROM table1 b WHERE a.name1 = b.name1 AND a.name2 = b.name2)
```
- 删除重复记录:
```sql
DELETE FROM table1 a WHERE ROWID != (SELECT MAX(ROWID) FROM table1 b WHERE a.name1 = b.name1 AND a.name2 = b.name2)
```
2. 用GROUP BY方法
GROUP BY语句常用于对数据进行分组统计,结合HAVING子句可以找出重复记录。查询和删除语句如下:
- 查询重复记录:
```sql
SELECT COUNT(num), MAX(name) FROM student GROUP BY num HAVING COUNT(num) > 1
```
- 删除重复记录:
这个方法不适合直接删除,因为GROUP BY不能与DELETE语句一起使用。通常需要先创建一个新的无重复表,然后清空原表,再插入新表数据:
```sql
CREATE TABLE table_new AS SELECT DISTINCT * FROM table1;
TRUNCATE TABLE table1;
INSERT INTO table1 SELECT * FROM table_new;
```
3. 用DISTINCT方法
DISTINCT关键字用于消除结果集中的重复行,适用于小型表。这个方法创建一个无重复的新表,然后将新表数据移回原表。操作如下:
- 创建新表:
```sql
CREATE TABLE table_new AS SELECT DISTINCT * FROM table1;
```
- 清空并重新插入数据:
```sql
TRUNCATE TABLE table1;
INSERT INTO table1 SELECT * FROM table_new;
```
4. 基于单个字段查找和删除重复记录
当我们只关注单个字段(如`peopleId`)的重复时,可以使用如下SQL语句:
- 查找重复记录:
```sql
SELECT * FROM people WHERE peopleId IN (SELECT peopleId FROM people GROUP BY peopleId HAVING COUNT(peopleId) > 1)
```
- 删除重复记录:
这个情况也需要先找到主键(通常是唯一不重复的字段),然后基于该字段进行删除。例如,如果有一个`peopleId_seq`作为自增主键:
```sql
DELETE FROM people WHERE peopleId NOT IN (SELECT MIN(peopleId) FROM people GROUP BY peopleId);
```
请注意,执行这些删除操作前一定要谨慎,最好先备份数据,避免不可逆的数据丢失。同时,对于大型表,应考虑性能因素,可能需要采用更复杂的策略,如分区表或并行处理。
相关推荐










cysheng84
- 粉丝: 0
最新资源
- 解决64位Win7系统USB转串口驱动问题
- 用Visual Studio 2010开发的C++足球游戏引擎
- 升级版工时定额计算软件20100601发布
- NiceSlider v1.0.2 更新日志:修复与新特性
- 迭代反投影法在超分辨率复原中的应用
- QQ电脑管家8.4版:专为QQ加速升级的精简绿色版
- WebView中Javascript与本地代码交互实现ZIP文件处理
- Android仿QQ登录界面的完整源码分享
- KVO实现的基础教程与Demo示例
- AStyle 2.04:Windows版代码规范整理利器
- Java算法精粹:40题解码经典编程挑战
- JSP网上书店系统源码及sql数据库解压缩指南
- Maven安装配置及项目创建步骤详解
- 高效监考员抽签软件,适用于高考中考及其他考试
- STM32F407单片机实现SD卡内MJEPG视频解码播放
- SpringMvc与Mybatis结合Memcached应用开发示例
- Playcolor:网页抓色工具,轻松获取颜色代码
- Silverlight下拉多选ComboBox自定义控件实现示例
- ARM7驱动数码管及LED显示十六进制数技术
- 在线迷你TXT小说阅读器:北大青鸟学士后项目展示
- Flex PHP DES加密解密技术详解
- GoF设计模式精解及C++实现源码解析
- 多特征融合下的粒子滤波人体跟踪技术
- 山寨QQ源码升级版:实现单聊、表情、文件传输及下线功能