Oracle如何实现多个字段去重
2016-05-08 20:18
411 查看
我们通常使用distinct关键字来去除重复记录,还有没有其他办法呢?通过查找资料,确认group by也可以,利用rowid也可以实现功能。其中,group by是用来分组统计的,能用distinct的地方就不要用group by。下面我们看一下几种方法具体如何实现,至于选用哪一种,主要还是看需求,实现功能是最主要的。
首先我们创建测试表hoegh,插入3条记录。我们可以看到,就前两个字段而言,第二条记录和第三条记录是重复的。
如下:
使用group by去重
gruop by是Oracle中常用的分组函数,我们看一下如何使用group by来实现去重功能。
我们需要将重复记录删掉,拿hoegh表来说,我们需要保留h3列值最大的那一行记录,我们可以通过下面语句来实现。
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。通过下面的语句,可以保留重复记录中的最新一条记录(即最后插入的那条记录)。
首先我们创建测试表hoegh,插入3条记录。我们可以看到,就前两个字段而言,第二条记录和第三条记录是重复的。
SQL> SQL> create table hoegh(h1 number,h2 number,h3 number); Table created SQL> insert into hoegh values(1,1,1); 1 row inserted SQL> insert into hoegh values(2,2,2); 1 row inserted SQL> insert into hoegh values(2,2,8); 1 row inserted SQL> commit; Commit complete SQL> select * from hoegh; H1 H2 H3 ---------- ---------- ---------- 1 1 1 2 2 2 2 2 8 SQL>使用DISTINCT去重
如下:
SQL> SQL> select distinct h1,h2 from hoegh; H1 H2 ---------- ---------- 1 1 2 2 SQL>
使用group by去重
gruop by是Oracle中常用的分组函数,我们看一下如何使用group by来实现去重功能。
SQL> SQL> select h1,h2 from hoegh group by(h1,h2); H1 H2 ---------- ---------- 1 1 2 2 SQL>
我们需要将重复记录删掉,拿hoegh表来说,我们需要保留h3列值最大的那一行记录,我们可以通过下面语句来实现。
SQL> SQL> delete from hoegh 2 where h3 not in (select max(h3) from hoegh group by h1,h2); 1 row deleted SQL> commit; Commit complete SQL> select * from hoegh; H1 H2 H3 ---------- ---------- ---------- 1 1 1 2 2 8 SQL>使用rowid去重
ROWID是数据的详细地址,通过rowid,oracle可以快速的定位某行具体的数据的位置。通过下面的语句,可以保留重复记录中的最新一条记录(即最后插入的那条记录)。
SQL> SQL> delete from hoegh 2 where rowid not in 3 (select max(rowid) from hoegh group by(h1,h2)); 1 row deleted SQL> commit; Commit complete SQL> SQL> select * from hoegh; H1 H2 H3 ---------- ---------- ---------- 1 1 1 2 2 8 SQL>
相关文章推荐
- JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键
- 安装oracle和plsql时的一点感想
- Navicat备份远程Oracle数据库到本地
- 4. Oracle PL/SQL语言及编程
- Oracle死锁解决
- centos7系统安装oracle11g指南
- oracle创建表空间
- Spring访问oracle数据库配置步骤
- Oracle 在Spring+Hibernate中的使用
- Oracle中Null与空字符串' '的区别
- Oracle 12c 简单的jdbc使用
- oracle 11g SQL语句补充学习
- Oracle 12c Windows安装、介绍及简单使用(图文)
- ORA-12154TNS无法解析指定的连接标识符
- azure 云上 oracle11.2.0.4里dataguard归档日志传输 1034 问题详细解决过程
- paoracle中的包头(Package)与包体(Package body)
- oracle中utl_file包读写文件操作实例学习
- Oracle的UTL_FILE.FOPEN学习笔记
- Oracle之UTL_FILE 包用法详解
- oracle触发器类型