搜索
首页数据库Oracle归纳整理oracle数据库去除重复数据常用的方法

本篇文章给大家带来了关于Oracle的相关知识,其中主要介绍了关于数据清理的时候常常会清除表中的重复的数据,那么在oracle中怎么处理呢?下面一起来看一下,希望对大家有帮助。

归纳整理oracle数据库去除重复数据常用的方法

推荐教程:《Oracle视频教程

创建测试数据

create table nayi224_180824(col_1 varchar2(10), col_2 varchar2(10), col_3 varchar2(10));
insert into nayi224_180824
select 1, 2, 3 from dual union all
select 1, 2, 3 from dual union all
select 5, 2, 3 from dual union all
select 10, 20, 30 from dual ;
commit;
select*from nayi224_180824;
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3
10 20 30

针对指定列,查出去重后的结果集

distinct

select distinct t1.* from nayi224_180824 t1;
COL_1 COL_2 COL_3
10 20 30
1 2 3
5 2 3

方法局限性很大,因为它只能对全部查询的列做去重。如果我想对col_2,col3去重,那我的结果集中就只能有col_2,col_3列,而不能有col_1列。

select distinct t1.col_2, col_3 from nayi224_180824 t1
COL_2 COL_3
2 3
20 30

不过它也是最简单易懂的写法。

row_number()

select *
  from (select t1.*,
               row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
          from nayi224_180824 t1) t1
 where t1.rn = 1
;
COL_1 COL_2 COL_3 RN
1 2 3 1
10 20 30 1

写法上要麻烦不少,但是有更大的灵活性。

针对指定列,查出所有重复的行

count having

select *
  from nayi224_180824 t
 where (t.col_2, t.col_3) in (select t1.col_2, t1.col_3
                                from nayi224_180824 t1
                               group by t1.col_2, t1.col_3
                              having count(1) > 1)
COL_1 COL_2 COL_3
1 2 3
1 2 3
5 2 3

要查两次表,效率会比较低。不推荐。

count over

select *
  from (select t1.*,
               count(1) over(partition by t1.col_2, t1.col_3) rn
          from nayi224_180824 t1) t1
 where t1.rn > 1
;
COL_1 COL_2 COL_3 RN
1 2 3 3
1 2 3 3
5 2 3 3

只需要查一次表,推荐。

删除所有重复的行

delete from nayi224_180824 t
 where t.rowid in (
                   select rid
                     from (select t1.rowid rid,
                                   count(1) over(partition by t1.col_2, t1.col_3) rn
                              from nayi224_180824 t1) t1
                    where t1.rn > 1);

就是上面的语句稍作修改。

删除重复数据并保留一条

分析函数法

delete from nayi224_180824 t
 where t.rowid in (select rid
                     from (select t1.rowid rid,
                                  row_number() over(partition by t1.col_2, t1.col_3 order by 1) rn
                             from nayi224_180824 t1) t1
                    where t1.rn > 1);

拥有分析函数一贯的灵活性高的特点。可以为所欲为的分组,并通过改变orderby从句来达到像”保留最大id“这样的要求。

group by

delete from nayi224_180824 t
 where t.rowid not in
       (select max(rowid) from nayi224_180824 t1 group by t1.col_2, t1.col_3);

牺牲了一部分灵活性,换来了更高的效率。

推荐教程:《Oracle视频教程

以上是归纳整理oracle数据库去除重复数据常用的方法的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文转载于:脚本之家。如有侵权,请联系admin@php.cn删除
Oracle备份和恢复:确保数据完整性和可用性Oracle备份和恢复:确保数据完整性和可用性Apr 10, 2025 am 09:40 AM

Oracle备份与恢复的核心目的是在数据丢失或损坏时,能够快速恢复数据库到一致的状态。1.备份阶段:通过RMAN或其他工具,将数据库文件复制到备份介质中。2.恢复阶段:当数据库发生故障时,首先恢复备份数据,然后通过应用重做日志文件,恢复到故障前的状态。

Oracle Real应用程序群集(RAC):可伸缩性和高可用性Oracle Real应用程序群集(RAC):可伸缩性和高可用性Apr 09, 2025 am 12:16 AM

OracleRAC通过多节点共享数据库存储,实现了高可用性和可扩展性。其工作原理包括负载均衡、故障转移和动态节点扩展,确保系统的高效运行和数据一致性。

Oracle云基础架构(OCI):在云中部署和管理Oracle数据库Oracle云基础架构(OCI):在云中部署和管理Oracle数据库Apr 08, 2025 am 12:09 AM

在OCI中部署和管理Oracle数据库可以通过以下步骤实现:1.创建数据库实例,使用OCIPythonSDK设置配置参数;2.配置网络和存储资源;3.连接到数据库并执行SQL查询;4.进行数据库备份和恢复操作;5.优化数据库性能,通过调整资源配置、网络优化和备份策略。这是一个高度自动化的过程,用户只需提供必要的配置参数,OCI会处理剩余的工作。

甲骨文面试问题:破解您的数据库管理员面试甲骨文面试问题:破解您的数据库管理员面试Apr 07, 2025 am 12:17 AM

OracleDBA面试准备需要掌握数据库架构、性能调优和备份恢复等核心知识。1.了解Oracle数据库架构,包括实例和数据库的关系。2.掌握性能调优方法,如SQL调优和索引优化。3.熟悉备份与恢复策略,使用RMAN和数据泵工具。通过这些准备,你能在面试中展现专业技能,成功通过面试。

高级Oracle SQL调整:优化专家的查询性能高级Oracle SQL调整:优化专家的查询性能Apr 06, 2025 am 12:06 AM

OracleSQL调优可以通过以下步骤提升查询性能:1.创建适当的索引,如为department列创建索引;2.分析执行计划,使用EXPLAINPLAN命令查看并优化;3.进行SQL重写,如使用子查询避免不必要的连接操作。通过这些方法,可以显着提升Oracle数据库的查询效率。

Oracle数据库安全性:硬化和保护您的数据Oracle数据库安全性:硬化和保护您的数据Apr 05, 2025 am 12:17 AM

Oracle数据库的安全性可以通过多种措施实现,包括认证、授权、加密和审计。1)使用密码文件进行用户认证和授权;2)通过透明数据加密(TDE)保护敏感数据;3)使用虚拟专用数据库(VPD)实现细粒度的访问控制;这些方法确保了数据的机密性、完整性和可用性。

Oracle Goldengate:实时数据复制与集成Oracle Goldengate:实时数据复制与集成Apr 04, 2025 am 12:12 AM

OracleGoldenGate通过捕获源数据库的事务日志并将变更应用到目标数据库,实现实时数据复制和集成。1)捕获变更:读取源数据库的事务日志,转换为Trail文件。2)传输变更:通过网络传输到目标系统,使用数据泵进程管理传输。3)应用变更:在目标系统上,复制进程读取Trail文件并应用变更,确保数据一致性。

Oracle PL/SQL Deep Dive:掌握过程,功能和软件包Oracle PL/SQL Deep Dive:掌握过程,功能和软件包Apr 03, 2025 am 12:03 AM

OraclePL/SQL中的过程、函数和包分别用于执行操作、返回值和组织代码。1.过程用于执行操作,如输出问候语。2.函数用于计算并返回值,如计算两个数之和。3.包用于组织相关元素,提高代码的模块化和可维护性,如管理库存的包。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热门文章

R.E.P.O.能量晶体解释及其做什么(黄色晶体)
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳图形设置
3 周前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您听不到任何人,如何修复音频
3 周前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解锁Myrise中的所有内容
3 周前By尊渡假赌尊渡假赌尊渡假赌

热工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript开发工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

VSCode Windows 64位 下载

VSCode Windows 64位 下载

微软推出的免费、功能强大的一款IDE编辑器

Atom编辑器mac版下载

Atom编辑器mac版下载

最流行的的开源编辑器