ORACLE查詢刪除重復記錄三種方法


本文列舉了3種刪除重復記錄的方法,分別是rowid、group by和distinct,小伙伴們可以參考一下。

1.用rowid方法

在ORACLE數據庫的內部,每一表都有一rowid偽列,行標識惟一標識行,提供對特殊行的快速存取。對該列使用最大(max)或者最小(min)函數可以非常容易地確定重復的行。

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

利用分組函數查找表中的重復行:按照某個字段分組,找出行數大於1的列,即由重復記錄

利用select 語句中的分組函數GROUP BY/HAVING可以很容易確定重復的行。假設需要創建惟一索引的列為num

對num用group by分組統計並返回每組的個數,如果組中記錄數超過1個就存在重復的行。命令如下

查數據:

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

這樣的話就把所有重復的都刪除了。

 這種查詢方式簡便、快捷,是ORACLE數據庫中最常用的一種方法。

 

3.用distinct方法 -對於小的表比較有用

create table table_new as   select distinct *   from table1 minux
truncate table table1;
insert into table1 select * from table_new;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM