最近项目中遇到一个问题,是关于重复数据问题。单位里面的组织数据会有组织路径类似
.1111111.22222222.33333333333.44444444444. 这样的组织ID层级。但是项目在自定义数据的时候进行一些操作导致了数据数据路径出现很多重复的组织ID 类似:
1、1111111.2222222.33333333.444444444. 444444444. 444444444. 444444444.
2、1111111.22222222.3333333.444444444. 444444444. 444444444. 444444444. 555555.
这种情况这样就涉及到了要把多余的.444444444. 444444444. 444444444. 444444444. 替换成只有. 444444444.
如果只有几条这样的数据那直接用sql
update org_info
SET FULLPATH= REPLACE( FULLPATH, '.444444444.444444444.', '.444444444.' )
where FULLPATH like '%.444444444.444444444.%';
就可以替换重复数据,重复多次就执行多次
但是涉及到数据太多无法一条一条的进行执行,所以只能另想他法解决
第一种情况的解决sql
update org_info ss,(
select FULLPATH,
substr(FULLPATH,length(FULLPATH)-20,21) as cc,
substr(FULLPATH,length(FULLPATH)-10,11) as aa,
substr(FULLPATH,length(FULLPATH)-20,11) as bb
from org_info where length(FULLPATH)>100
) xxx
set ss.FULLPATH= REPLACE( ss.FULLPATH, xxx.cc, xxx.aa )
where ss.FULLPATH =xxx.FULLPATH;
因为第一种情况都是最后面的数据重复,那么先将最后面的两个组织ID单独查询出来,并且进行多表关联更新操作,将最后两个相同组织ID的数据进行数据替换(因为重复字段多所以路径比较长则优先处理长度比较长的数据加了字段长度筛选)
第二种情况的解决sql
update org_info ss,(
select FULLPATH,
substr(FULLPATH,length(FULLPATH)-20,21) as cc,
substr(FULLPATH,length(FULLPATH)-10,11) as aa,
substr(FULLPATH,length(FULLPATH)-20,11) as bb
from org_info where length(FULLPATH)>100
) xxx
set ss.FULLPATH= REPLACE( ss.FULLPATH, xxx.cc, xxx.aa )
where ss.FULLPATH =xxx.FULLPATH;
因为第二种情况都是倒数第二第三列的数据重复,那么先将倒数第二第三列的两个组织ID单独查询出来,并且进行多表关联更新操作,将最后两个相同组织ID的数据进行数据替换。依次类推