Oracle查询去除重数据

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle查询去除重数据相关的知识,希望对你有一定的参考价值。

1。用rowid方法

据据oracle带的rowid属性,进行判断,是否存在重复,语句如下:

查数据:

select * from table1 a where rowid
!=(select max(rowid)

from table1 b where a.name1=b.name1 and
a.name2=b.name2......)

删数据:

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方法

查数据:

select count(num), max(name) from student --列出重复的记录数,并列出他的name属性

group by num

having count(num) >1 --按num分组后找出表中num列重复,即出现次数大于一次

删数据:

delete from student

group by num

having count(num) >1

这样的话就把所有重复的都删除了。

3.用distinct方法 -对于小的表比较有用

create table table_new as select distinct *
from table1 minux

truncate table table1;

insert into table1 select * from table_new;
参考技术A 1、distinct 关键字的用法:distinct 关键字后面的字段组合去重 distinct 必须

select distinct id from test
结果 ;根据id 去重
select distinct id,name from test
2、group by 分组去重
select id,name from test group by id,name
结果:根据id,name 组合去重
3、row_number ()over(partition by 列 order by 列 asc | desc)方法
3.1 row_number() over(order by column asc) 先对列column按照升序,再为每条记录返回一个序列号
3.2 row_number() over(partition by column1 order by column2 asc) 先按照column1分组,再对分组后的数据根据column2 升序排列
参考技术B select distinct rowid where 表名 参考技术C 分组后,根据rowid取就可以

oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据

表 tt_test
id md
10010 22
10010 23
10010 55
33333 12
222222 13
是保留重复数据中MD的值最小的那行数据 意思是这行数据不删除

delete from tt_test
where id in (select id from tt_test group by id having count(md)>1) and md not in (select min(md) md from tt_test group by id)
解释:
id in (select id from tt_test group by id having count(md)>1) 表示id有重复的记录
md not in (select min(md) md from tt_test group by id) 表示不是md最小的记录
参考技术A delete tt_test where rowid in (
select rowid
(select
row_number()over(partition by id order by md) rn,rowid from tt_test)
where rn > 1
)追问

运行了下,但是在第二个select处报错来着

追答

row_number() over 中间有空格

参考技术B delete from tt_test where id in(select id from tt_test group by id having min(md)!=max(md)) and md not in(select min(md) from tt_test group by id having min(md)!=max(md)) 参考技术C delete from XXX where id not in (select id from (select id,row_number() over (partition by id order by md) "row" from XXX) where "row"=1) 参考技术D rownumber rank追问

。。哥们,能具体说下吗?

第5个回答  2012-07-19 4

以上是关于Oracle查询去除重数据的主要内容,如果未能解决你的问题,请参考以下文章

oracle数据库查询去除重复的记录,保留其中的某一条

oracle 数据去重问题,要求去掉表中的重复数据,但得保留重复数据中MD的值最小的那条数据

oracle 多表多字段去重问题!

oracle查询出来的数据如何消除重复数据

oracle查询重复数据方法

oracle中,查询结果去除重复列,插入到新表中