sap abap for all entries in 会自动删除重复行吗?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sap abap for all entries in 会自动删除重复行吗?相关的知识,希望对你有一定的参考价值。
FOR ALL ENTRIES IN 语句 不只是会删除重复项,且连接表需注意:尽量按取值字段排序且内表不为空,否则执行效率会极低。 参考技术A types: begin of ty_ma,matnr type mara-matnr,
end of ty_ma.
data: lt_mara type standard table of mara,
lt_ma type standard table of mara,
lw_ma type mara.
lw_ma-matnr = '000000000000000023'.
append lw_ma to lt_ma.
lw_ma-matnr = '000000000000000023'.
append lw_ma to lt_ma.
select *
from mara
into table lt_mara
for all entries in lt_ma
where matnr = lt_ma-matnr.
break-point.
你说的应该是这种情况,我测试了,是会删的, 但最好确保lt_ma这个表没有重复, 这样效率会比较高 参考技术B 会的,所以为保证取数正确,有时候要分析取的数的性质,尽量把表的主键都取出来,因为主键有唯一性
ABAP:for all entries in 语句
在ABAP开发中,对于不能使用join的聚集表或者需要使用SELECT 的内表,
我们一般使用for all entries in 语句将该表与内表串联,查询出需要的数据,
例如: BSEG聚集表为例,如下:
SELECT bseg~kunnr bseg~lifnr bseg~belnr
INTO TABLE itab_bseg
FROM bseg FOR ALL ENTRIES IN itab_main
WHERE bukrs in _bukrs
and ( belnr = itab_main-belnr AND hkont = itab_main-hkont ).
由于BSEG不能和BSIS做inner join所以先将BSIS内容放到itab_main 中,
然后用 FOR ALL ENTRIES IN来串联。
1-WHERE子句中的bukrs in _bukrs是指bseg-bukrs存在于_bukrs这个select-options中,
_bukrs不是itab_main的field所以这部分不包括在括号中.
当然会增加内存使用了。
原本一个条件,数次(驱动表的纪录条数)向对DB操作,
使用了FOR ALL ENTRIES后,
相当于把驱动表里的条件字段的所有值用OR 连起来,
一次对DB操作,
条件语句增大,势必使内存占用增多。
另外,其它可以使用inner join的地方,也可以视情况使用该语句,
查询优化是个比较复杂的问题,不仅仅与代码本身有关,还与数据量有关,
有可能一种查询方法在一个数据级特别快,另一个书局级其优势就不明显甚至成为劣势。
还需要注意的是,使用该语句之前,必须判断for all entries in 后面的条件表不为空,否则取出所有数据!
以上是关于sap abap for all entries in 会自动删除重复行吗?的主要内容,如果未能解决你的问题,请参考以下文章
ABAP "FOR ALL ENTRIES IN"的用法及注意事项
关于abap中inner join 还有for all entries in 的问题~各位大神来帮帮忙啊~小女子在线等候!