查询表中重复数据
"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。
下面介绍第二种情况
查询是否存在重复数据
select id,count(id) from A group by id having count(id)>1
背景:oracle 表中数据有相同的id(这不是主键),但是数据是不同时间建的,想删除重复id的数据又保留最近创建的
1.查询出所有不想要的数据
select temB.* from (select t.*, t.rowid as rid, row_number() over(partition by id order by create_date desc) rank from A) temB where rank > 1
2.delete from A where A.rowid in (上面的查询结果)
ROWID是ORACLE中的一个重要的概念。用于定位数据库中一条记录的一个相对唯一地址值。通常情况下,该值在该行数据插入到数据库表时即被确定且唯一。ROWID它是一个伪列,它并不实际存在于表中。它是ORACLE在读取表中数据行时,根据每一行数据的物理地址信息编码而成的一个伪列。所以根据一行数据的ROWID能找到一行数据的物理地址信息。从而快速地定位到数据行。数据库的大多数操作都是通过ROWID来完成的,而且使用ROWID来进行单记录定位速度是最快的。
要理解索引,必须先搞清楚ROWID。