Oracle删除重复记录:实用SQL解决方案
需积分: 11 34 浏览量
更新于2024-09-21
收藏 39KB DOC 举报
"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);
```
请注意,执行这些删除操作前一定要谨慎,最好先备份数据,避免不可逆的数据丢失。同时,对于大型表,应考虑性能因素,可能需要采用更复杂的策略,如分区表或并行处理。
点击了解资源详情
点击了解资源详情
点击了解资源详情
2023-07-10 上传
2009-05-19 上传
2016-03-02 上传
2020-12-15 上传
2018-03-07 上传
2021-01-21 上传
cysheng84
- 粉丝: 0
- 资源: 1
最新资源
- ali-cdn-url:获取阿里云cdn请求地址
- Python3实战Spark大数据分析及调度-第11章 Azkaban实战篇.zip
- 第一个Visual C++应用程序的源码 关于鼠标坐标适时显示
- svelteblox:消费cueblox api的公共网站
- NokiaLCD:诺基亚 5110 LCD 的 AVR 库
- 基于matlab的图像椒盐噪声的平滑效果⽐较
- Latex Documentclass Plan Nacional I+D+i:国家研发计划的LaTeX模板-开源
- Handwritten-Digits-Classification:一种新颖的模型
- VC++ MFC编程实例-新年好
- 6-12-嵌入式省赛.zip
- FriendsFinder:https://enigmatic-taiga-02028.herokuapp.com
- Topic-Constrained-Bodies
- afghanistan-2014-analysis:为我们的阿富汗选举分析托管代码
- hello-world:这是我的第一个仓库
- Webdriver-io-project
- BostonHaskell2015:[Talk] 用 EDSL 构建讨论