两内表关联删除操作

 

有两个内部表:IT_TAB1(假设N条记录),I T_TAB2(假设M条记录)。
I T_TAB1的结构如下
ID  BUKRS  BELNR  DMBTR
001 A001  1000000010 10000
002 A001  1000000020 20000
…… …… …… ……
I T_TAB2的结构如下
BUKRS  BELNR
A001  1000000010
A001  1000000050
…… ……
要求是根据内部表ITAB2对内部表ITAB1进行删除处理,ITAB1中BELNR项与ITAB2中BELNR项相同的全部删除掉,该事例中所得结果应为:
I T_TAB1的结构如下
ID  BUKRS  BELNR  DMBTR
002 A001  1000000020 20000
…… …… …… ……

方法一:循环套循环
外层循环IT_TAB2,里层循环IT_TAB1。
此种方法被一般ABAP开发规约所禁止。
三种方法中,执行时间排第二。
方法二:利用RANGE TABLE
将IT_TAB2导入RANGE TABLE,
在条件中使用IN语句来删除IT_TAB1.
此种方法,由于RANGE TABLE的做成使用了一回循环,
再加上用IN 语句删除,相当于使用了两次循环,所以速度比较慢,
三种方法中,执行时间排第三。
另外此法只适用于比较项目(例如IT_TAB2-BELNR)只有一项时,
而且,作为比较项目的该项值被反复使用时(假设还有内部表IT_TAB3,IT_TAB4…都需要根据IT_TAB2中的BELNR项来作相应处理时),
采用该法,才更显效率。
如果比较项目为复数项时,请使用其他两种方法。
方法三:并行算法
使用该算法,要事先对两个内部表进行排序,
然后两层循环嵌套,
外层是IT_TAB2,里层是IT_TAB1。
与方法一不同的是,
方法一的执行次数为(N * M),方法三的执行次数为( N + M )。
所以该方法在三种方法中,执行时间排第一。
但使用该算法有一个条件限制,
就是IT_TAB1中的记录一定要在IT_TAB2所包含的记录范围内。
嵌套循环时推荐尽可能使用该平行算法。
该法缺点是:1.使用限制条件要判断准确。
                        2.代码可读性差。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值