oracle中删除多余的列

 今天,刚学了oracle,老师讲了一个删除多余列的练习题,感觉挺有意思的,因此,做了下面的总结。

 第一步:查询出重复列的最大ROWID,或者最小ROWID

 " || "为连接操作符

select max(rowid) from stuinfo
 group by stuname,stuage
having (count(stuname || stuage)>1)

 第二步:查询出没有重复列的ROWID,这里必须要写max或者min,不写会报错

select max(rowid) from stuinfo
 group by stuname,stuage
having (count(stuname || stuage)=1)

 第三步:把两个查询链接一起,然后删除

delete from stuinfo
  where rowid not in (
        select max(rowid) from stuinfo
          group by stuname,stuage
        having (count(stuname || stuage)>1)
        
        union
        
        select max(rowid) from stuinfo
          group by stuname,stuage
        having (count(stuname || stuage)=1)
  )

实现原理

 1:先按照stunamestuage两个字段,进行分组,然后通过具有筛选出所有重复的列,这里我们可以取最小的ROWID或者取           最小的ROWID都可以,就是目的拿重复列中的一条。

2:原理基本和步骤1一样,这次拿没有重复的列因此,count(1)= 1,可以理解为步骤1的反面。

3:把前面两步链接,查询的即是所有没重复列的ROWID,通过not 即可删除重复的列。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值