问题表述
嗯,又是我,然后这个周的任务是将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,应该可以直接写,但是我不是很清楚了就