oracle查重复数据rowid
2022-05-13

问:ORACLE查询重复数据
- 答:oracle重复数据可用聚合函数和having语句来实现。
如test表中有如下数据:
现在要求查询name中有重复的数据,可用如下语句:
select name from test group by name having count(*)>1;
结果如图: - 答:用rank函数,例如:
select *
from (select t.*, rank() over(partition by job order by hiredate desc) r
from scott.emp t)
where r = 1
问:Oracle查询去除重数据
- 答:select distinct rowid where 表名
- 答:分组后,根据rowid取就可以
问:oracle如何查询重复数据然后全部显示,举例:一份Excel中有100条数据,只有10条不同,我一个个
- 答:在oracle中,每一条记录都有一个rowid,rowid在整个数据库中是唯一的,rowid确定了每条记录是oracle中的哪一个数据文件、块、行上。在重复的记录中,可能所有列的内容都相同,但rowid不会相同。使用rowid,SQL语句如下
:
select * from tbl a where rowid not in (select max(b.rowid) from tbl b where a.col1=b.col1 and a.col2 = b.col2) - 答:用高级筛选的“选择不重复记录”就可以把100条中的10选出来了。
问:oracle用rowid去掉重复值
- 答:你可以将这个操作看做一个嵌套循环;
对test表的每一条记录,到test中找出所有a,b字段与当前字段一样的记录,找出其rowid最大值,跟当前记录的rowid比较,如果不等于则删除,如果相等,则保留。
所以,本条sql的功能是对所有a,b字段重复的记录,只保留一条。
就是说,本sql等价于下面的sql
delete from test t where rowid not in
(
select max(rowid) from test
group by a,b
)