千家信息网

oacle 删除重复数据

发表于:2024-11-14 作者:千家信息网编辑
千家信息网最后更新 2024年11月14日,--测试数据create table test as select * from dba_objects;insert into test select * from test;--查看是否有重复数据
千家信息网最后更新 2024年11月14日oacle 删除重复数据

--测试数据

create table test as select * from dba_objects;

insert into test select * from test;

--查看是否有重复数据

select * from test order by object_id;

--用rowid删除

select rowid,a.* from test a order by object_id;

--根据rowid分组

--办法(1)not in

DELETE FROM test WHERE ROWID NOT IN (SELECT MAX(ROWID) FROM test GROUP BY object_id)

--办法(2) in

DELETE FROM test a

WHERE ROWID IN (SELECT ROWID

FROM (SELECT row_number() over(PARTITION BY object_id ORDER BY ROWID) rn,

a.*

FROM test a)

WHERE rn > 1)


--办法3 exists

DELETE FROM test a

WHERE EXISTS (SELECT NULL

FROM test b

WHERE a.object_id = b.object_id

AND a.rowid < b.rowid)

--in的等价写法

DELETE FROM test a

WHERE object_id IN (SELECT object_id

FROM test b

WHERE a.object_id = b.object_id

AND a.rowid < b.rowid)


--如果要保留3条重复数据

DELETE FROM test a

WHERE ROWID IN (SELECT ROWID

FROM (SELECT row_number() over(PARTITION BY object_id ORDER BY ROWID) rn,

a.*

FROM test a)

WHERE rn > 3)


0