点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
专家们,
我有两个内部表。
只是为了阐明我的观点。 我正在举一个例子:
内部表A包含10个条目,内部表B包含12个条目。
表A和B有10个共同的条目。 现在,我对B中而不是A中的2个条目感兴趣。
我正在使用以下方法:
在这里,我只是从B中删除A中存在的条目。
将LOOP AT
删除
ENDLOOP。
但是效率不高。 因此,您能建议我采取任何有效的方法来实现这一目标吗?
我还要动态创建上述where条件。
任何帮助将不胜感激。
谢谢
Partish
在大多数情况下,嵌套内部表操作的问题是通过线性搜索访问内部表,从而导致 O(n ^ 2) 时间复杂度,对于大量记录而言,这是非常糟糕的。 这也适用于DELETE。
可以通过仔细选择表类型/表键来避免这种情况,例如,将表B定义为具有DELETE语句可以使用的主键的排序表。
但是,如果您正在建立动态的WHERE条件-正如您提到的-这可能涉及RTTS的使用。
Hello Partish,
不想在循环内编写delete stmt,那么在这种情况下-在表B中再创建一列,并为表A的每个类似记录为其设置值。可以用值'X'来表示。
然后在主循环之外,您只需编写delete语句并从表B中删除记录,该表的该列的值为X。因此,您现在只剩下2个条目。
BR/Himayat
您可以在一个表上循环,然后读取另一个表,然后使用sy-subrc检查执行操作。
说您可以执行以下操作
排序表B。
将tableA循环到Wa_tableA中。 (如果有条件,请使用关键字" where" .........)
使用键field1_tableB = wa_tableA-field1 field2_tableB = wa_tableA-field2 ......将表B读取到wa_tableB中...
如果sy-subrc <> 0。
找不到记录
否则。
(记录在两个表中)
endif。
您可以查找语法。希望这会有所帮助
这也不是最佳性能,因为您使用的是标准表。
您好@ 平民主义者
我没有使用任何标准表
我使用了我创建的ztables。
此致
DINESH KUMAR M
Hello Partish,
尝试一下
类型:st_zkds01的开始,
mandt类型zkds01-mandt,
num1类型zkds01-num1,
st_zkds01的结尾。
类型:st_zkds012的开始,
mandt类型zkds012-mandt,
num1类型zkds012-num1,
st_zkds012的结尾。
数据:st_1 st_zkds01的类型表,
wa_1 st_zkds012的类型表,
wa_2 st_zkds012的类型表。
选择开始。/p>
选择*从zkds01进入表it_1。
选择*从zkds012进入表it_2。
DATA lv_data TYPE num1。
在it_2上进入wa_2。
DATA(标志)=0。
将表_1读入wa_1中,键num1 = wa_2-num1。
如果sy-subrc =0。
标志=1。
ENDIF
IF标志=0。
写:/wa_2-num1。
ENDIF。
ENDLOOP。
一周热门 更多>