sql学习之oracle中数据迁移,子查询赋值

问题表述

嗯,又是我,然后这个周的任务是将GS7中的一些基础数据的表导入到GScloud中。然后呢,这就出现了一个问题,我在导入费用项目的时候,在7中是通过一个字段叫做ROFYXM_FJNM,具体的就是这个样子
在这里插入图片描述

他之所以可以正确的显示不同路径下面的文件级别就是通过这个来控制的,但是呢GScloud是通过记录父级的主键id来进行的,于是在一个不想用懒得用java的人就开始想办法使用sql来完成

思路

首先呢给出一个思路,我们是需要去自己表数据的递归,然后因为技术问题吧,我没有想到可以一次就成功的sql语句。
思路就是,判断是不是同一个路径级别的,然后通过截取ROFYXM_FJNM字段的长度来进行判断父级,

update a set a.fid=(select b.nm from b where b.fjnm=substr(a.fjnm,0,4)) where a.ROFYXM_JC='2'

这是一个大体上的思路,a…fid就是我们需要去拿去的主键id去保存位置,然后呢这里的a表和b表其实是同一张表,因为我们需要递归(其实我也不知道这个是不是叫做递归大体上就是自己循环自己)所以这么写。b.nm就是我们的主键id,fjnm这个字段就是那个代表文件等级路径的那个字段,通过substr方法截取不同的长度。最后因为不同的文件级别所以截取的长度不同,根据ROFYXM_JC'字段来判断文件的级别,这个字段等于1,就是ROFYXM_FJNM字段长度为4,等于就是ROFYXM_FJNM字段长度8,根据不同的等级截取字符串。

问题处理
update ROFYXM_forprimark a
   set a.ROFYXM_XGR =
       (select b.ROFYXM_NM
          from ROFYXM_forprimark b
         where b.ROFYXM_FJNM = substr(a.ROFYXM_FJNM, 0, 4))
 where a.ROFYXM_JC = '2'
 update ROFYXM_forprimark a
   set a.ROFYXM_XGR =
       (select b.ROFYXM_NM
          from ROFYXM_forprimark b
         where b.ROFYXM_FJNM = substr(a.ROFYXM_FJNM, 0, 8))
 where a.ROFYXM_JC = '3'
 update ROFYXM_forprimark a
   set a.ROFYXM_XGR =
       (select b.ROFYXM_NM
          from ROFYXM_forprimark b
         where b.ROFYXM_FJNM = substr(a.ROFYXM_FJNM, 0, 12))
 where a.ROFYXM_JC = '4'

然后大体上就是这么处理,因为文件的等级一共是4层,所以ROFYXM_JC最大为4,应该可以直接写,但是我不是很清楚了就

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

又是重名了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值