由于功能开发进度的问题,人员录入的时候仅能够多次录入,不能够录入之后直接以该数据未蓝本引入导致多部门的时候必须多次创建冗余的数据,且由于数据录入的不规范,录入了许多相同的数据,特别是同单位同部门的数据,故需要处理此类数据,因此需要对此类重复的数据设置删除标识,此组数据仅保留一项(可直接拉倒最底下看参看链接,自己实现)

思路
  1. 使用having count(字段)>1 获取到重复字段,然后反过来查出所有涉及到数据

  1. 由于前面已经对重复数据设置了唯一新增标识,其余的重复数据设置了引用标识,此时考虑到使用这个标识进行排序,然后得到每一组的最小一项ROWNUM,若直接进行删除重复项会导致唯一新增标识被错误的去掉了(回想一下可以先对此种数据先进行处理再设置唯一新增标识

  1. 得到最小项的ROWNUM,然后对非此ROWNNUM的数据设置删除标识

  1. 代码实现

注意点:将伪列ROWNUM 给定一个别名 原先尝试使用not in 发现无法实现 所以只能一层层包下去
update表1set 字段5 = '3' where 字段4 in (select 字段4 from (select ROWNUM a ,x.字段4 from (select字段4 from 表1 twhereEXISTS(select字段1,字段2from (select字段1,字段2 from表1where字段5 = '0'GROUP BY 字段1 ,字段2,字段3 HAVING count(字段2)>1 ORDER BY 字段1)wheret.字段1 = 字段1 and t.字段2 = 字段2)ORDER BY 字段1,字段3,字段2,字段6) x ) bwhere a notin(select MIN(ROWNUM) a from (select字段1,字段2,字段3 from 表1 twhereEXISTS(select字段1,字段2from (select字段1,字段2 from表1where字段5 = '0'GROUP BY 字段1 ,字段2,字段3 HAVING count(字段2)>1ORDER BY 字段1)wheret.字段1 = 字段1 and t.字段2 = 字段2)ORDER BY 字段1,字段3,字段2,字段6) x GROUP BY 字段1,字段2,字段3));
  1. 不使用ROWID ROWID 与ROWNUNM都是伪列的意思但是代表的意义不同,ROWID代表的是物理地,ROWNUNM是查询出来的逻辑编号

下图是对同一张表的排序不同查询的ROWID


参考:https://www.cnblogs.com/zfox2017/p/7676237.html

https://zhidao.baidu.com/question/1054390124419451539.html

https://blog.csdn.net/liuyongheng1991/article/details/106985963