oracle查询重复数据和删除重复记录示例分享

union all select '006','王五','555555'

复制代码 代码如下:sHw码友部落

delete TableA from TableA Twhere

例:表中有条六条记录。   其中张三和王五   的记录有重复


          from User u
delete from vitae a


while @@fetch_status=0

在A表中存在一个字段“name”,


复制代码 代码如下:sHw码友部落

select * from vitae a

set rowcount 0 方法二
)
                                group by u.user_name   having count(*) > 1)
005 张三 777777


sHw码友部落

and rowid not in (select min(rowid) from people group by peopleId having count(peopleId )>1)
sHw码友部落

exists(
"重复记录"有两个意义上的重复记录,一是完全重复的记录,也即所有字段均重复的记录,二是部分关键字段重复的记录,比如Name字段重复,而其他字段不一定重复或都重复可以忽略。

复制代码 代码如下:sHw码友部落

end
1、对于第一种重复,比较容易解决,使用



delete 表名 from 表名 as Twhere

sHw码友部落


declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) >; 1


create table TableA ( id varchar(3),customer varchar(5),PhoneNo varchar(6))
1、查找表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断

一、查询某个字段重复
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
sHw码友部落

003 王五 555555
三,查询并删除重复记录的SQL语句

复制代码 代码如下:sHw码友部落


复制代码 代码如下:sHw码友部落


复制代码 代码如下:sHw码友部落

and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
fetch cur_rows into @id,@max
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
select 1from表名 where 字段A=T.字段A and 字段B=T.字段B,(....)
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

方法一

复制代码 代码如下:sHw码友部落

复制代码 代码如下:sHw码友部落

复制代码 代码如下:sHw码友部落

insert into TableA select '001','张三','777777'
001 张三 777777


3、查找表中多余的重复记录(多个字段)
where (a.peopleId,a.seq) in (select peopleId,seq from vitae group by peopleId,seq having count(*) > 1)
006 王五 555555

and自增列 < T.自增列
就可以得到无重复记录的结果集。
select @max = @max -1
declare @max integer,@id integer
现在就是需要查询出在该表中的各记录之间,“name”值存在重复的项;
sHw码友部落

查询及删除重复记录的SQL语句
比方说

                                 from User u

总结

二,删除表中某几个字段的重复

Select Name,sex,Count(*) From A Group By Name,sex Having Count(*) > 1
如果还查性别也相同大则如下:
delete from people
where peopleId in (select peopleId from people group by peopleId having count(peopleId) > 1)

(三)

TableA
union all select '004','张三','777777'
id customer PhoneNo
Select Name,Count(*) From A Group By Name Having Count(*) > 1

(二)


sHw码友部落

001 张三 777777

union all select '005','张三','777777'


union all select '002','李四','444444'

复制代码 代码如下:sHw码友部落

sHw码友部落

sHw码友部落



复制代码 代码如下:sHw码友部落

select 1fromtablea where customer=T.customer and phoneno=T.phoneno

5、查找表中多余的重复记录(多个字段),不包含rowid最小的记录

004 张三 777777
002 李四 444444
sHw码友部落

如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除

结果

4、删除表中多余的重复记录(多个字段),只留有rowid最小的记录
open cur_rows

exists(
select * from people
如何写一个sql语句将TableA变成如下
sHw码友部落

 

      select *
sHw码友部落

注:rowid为oracle自带不用该.....

set rowcount @max
)
         where u.user_name in (select u.user_name
fetch cur_rows into @id,@max
and rowid not in (select min(rowid) from vitae group by peopleId,seq having count(*)>1)
select distinct * from tableName

2、删除表中多余的重复记录,重复记录是根据单个字段(peopleId)来判断,只留有rowid最小的记录


select * from vitae a

测试环境

复制代码 代码如下:sHw码友部落

sHw码友部落

andid < tt.id
union all select '003','王五','555555'
sHw码友部落

复制代码 代码如下:sHw码友部落

begin
而且不同记录之间的“name”值有可能会相同,


该方法适用于有一个字段为自增性,例如本例中的:id

close cur_rows


复制代码 代码如下:sHw码友部落

003 王五 555555
002 李四 444444
delete from 表名 where 主字段 = @id