oracle中删除多余的列

版权声明:如需转载,请注明出处! https://blog.csdn.net/qq_41172416/article/details/83829239

 今天,刚学了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 即可删除重复的列。

猜你喜欢

转载自blog.csdn.net/qq_41172416/article/details/83829239