Oracle查询表里重复数据

一、查询结果只显示重复的字段

1. 查询重复的单个字段(group by)

select 重复字段A, count(*)
  from 表
 group by 重复字段A
having count(*) > 1

2.查询重复的多个字段(group by)

select 重复字段A, 重复字段B, count(*)
  from 表
 group by 重复字段A, 重复字段B
having count(*) > 1

 

二、查询结果显示重复数据的所有字段

1.查询重复的单个字段( rowid)

-- table a,table b  代表同一张表 
select a.*
   from table a, table b
  where a.重复字段 = b.重复字段
    and a.rowid != b.rowid
  order by a.重复字段

排序是为了更直观的比较多个重复数据

2.查询重复的多个字段( rowid)

--  table a, table b 代表同一张表
select a.*
   from table a, table b
  where a.重复字段A = b.重复字段A
    and a.重复字段B = b.重复字段B
    and a.rowid != b.rowid
  order by a.重复字段A

三、删除重复数据

1.删除重复数据中rowid 最大的数据

-- 先查出来看一眼  table a,table b 属于同一张表  rowid 最大的数据
select *
  from table a
 where rowid != (select max(rowid)
                   from table b
                  where a.重复字段 = b.重复字段)

-- 删除这部分数据  rowid 最大的数据

delete from table a
 where rowid != (select max(rowid)
                   from table b
                  where a.重复字段 = b.重复字段)

2.删除重复数据中rowid 最小的数据

-- 先查出来看一眼  table a,table b 属于同一张表  rowid 最小的数据
select *
  from table a
 where rowid != (select min(rowid)
                   from table b
                  where a.重复字段 = b.重复字段)

-- 删除这部分数据  rowid 最小的数据

delete from table a
 where rowid != (select min(rowid)
                   from table b
                  where a.重复字段 = b.重复字段)

3.删除所有重复的数据

-- 慎重考虑后执行,后悔记得及时回滚。

delete from table group by 重复字段 having count(重复字段) > 1

注意:如果误删了数据,请看这里

回滚也不管用了,记得点这个链接,找回刚才删除的数据

  • 12
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值