加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

oracle 查询重复数据并且删除, 只保留一条数据

发布时间:2020-12-12 13:37:17 所属栏目:百科 来源:网络整理
导读:数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据 一:重复数据根据单个字段进行判断 1、首先,查询表中多余的数据,由关键字段(name)来查询。 select * from OA_ADDRESS_BOOK where name in (select nam

数据库操作中,经常会因为导数据造成数据重复,需要进行数据清理,去掉冗余的数据,只保留正确的数据

一:重复数据根据单个字段进行判断

1、首先,查询表中多余的数据,由关键字段(name)来查询。

select * from OA_ADDRESS_BOOK where name in (select name from OA_ADDRESS_BOOK group by name having count(name)>1)

?

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

delete from OA_ADDRESS_BOOK where (Name) in?

(select Name from OA_ADDRESS_BOOK group by Name having count(Name) >1)?

and rowid not in (select min(rowid) from OA_ADDRESS_BOOK group by Name having count(Name)>1)

?

二:重复数据根据多个字段进行判断

1、首先,查询表中重复数据,由关键字段(Name,UNIT_ID)来查询。

select * from OA_ADDRESS_BOOK book1 where (book1.name,book1.unit_id) in?
(select book2.name,book2.unit_id from OA_ADDRESS_BOOK book2 group by ?book2.name,book2.unit_id ?having count(*)>1)

?

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

?

?

delete from OA_ADDRESS_BOOK a where (a.Name,a.UNIT_ID) in?
(select Name,UNIT_ID from OA_ADDRESS_BOOK group by Name,UNIT_ID having count(*) > 1)?
and rowid not in (select min(rowid) from OA_ADDRESS_BOOK group by Name,UNIT_ID having count(*)>1)


3、查询表中重复数据,重复数据是根据多个字段(Name,UNIT_ID)来判断,不包含rowid最小的记录 ? select name,unit_id from OA_ADDRESS_BOOK a where (a.Name,a.UNIT_ID) in? (select Name,UNIT_ID having count(*) > 1)? and rowid not in (select min(rowid) from OA_ADDRESS_BOOK group by Name,UNIT_ID having count(*)>1)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读