本文列舉了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;
