我在一个名为cpgrprulrel的表中有以下数据。
CPGRPRULREL_NUM | CPGRPRULREL_NUM_PRIOR | STATUS | CNDQUALSRC_CD | CNDQUALTYP_CD | CPGRP_NUM
--------------------------------------------------------------------------------------------------
41292 | 41289 | Active | PRODCNT | PRODCNTUNQ |
41289 | 41286 | Superseded | OTHERPG | | 118729
41286 | 41283 | Superseded | SUBM | VOLUME |
41283 | 41280 | Superseded | OTHERPG | | 118729
41280 | 41277 | Superseded | OTHERPG | | 118729
41277 | null | Superseded | PRODCNT | PRODCNTALL |
在这里,cpgrprulrel\u num\u prior是到cpgrprulrel\u num的链接(即具有外键约束-一种父子关系)。
我想用cpgrp\u num=118729删除所有。在此之前,我需要更新剩余行的cpgrprulrel\u num\u prior的值,以便正确的链接保持不变。
我需要更新查询,这将只更新行有cpgrp_num<>118729和以下数据后运行更新。
CPGRPRULREL_NUM | CPGRPRULREL_NUM_PRIOR | STATUS | CNDQUALSRC_CD | CNDQUALTYP_CD | CPGRP_NUM
--------------------------------------------------------------------------------------------------
41292 | 41286 | Active | PRODCNT | PRODCNTUNQ |
41289 | 41286 | Superseded | OTHERPG | | 118729
41286 | 41277 | Superseded | SUBM | VOLUME |
41283 | 41280 | Superseded | OTHERPG | | 118729
41280 | 41277 | Superseded | OTHERPG | | 118729
41277 | null | Superseded | PRODCNT | PRODCNTALL |
请注意,有两行cpgrprulrel\u num 41292和41286的cpgrprulrel\u num\u先前已更新。
2条答案
按热度按时间d6kp6zgx1#
所以你想得到前一个
CPGRPRULREL_NUM
哪里CPGRP_NUM <> 118729
?这样的方法应该有用:
构建树,从第一个开始(之前为空)
如果前一个
CPGRP_NUM
是118729,那么:返回上一个
CPGRPRULREL_NUM_PRIOR
或者CPGRPRULREL_NUM
如果为空给:
xlpyo6sf2#
使用分层子查询查找每个条目的叶值:
D小提琴
然后可以删除不需要的行。