Mysql批量修改指定字符串中重复数据

文章讲述了项目中遇到的组织数据冗余问题,通过SQL的多表关联和字符串替换方法,针对不同情况(最后面或倒数第二、三列重复)来减少冗余组织ID,提高数据处理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近项目中遇到一个问题,是关于重复数据问题。单位里面的组织数据会有组织路径类似

.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的数据进行数据替换。依次类推

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值