我正在比较SELECT FOR ALL ENTRIES
与LOOP SELECT SINGLE
,结果之间有很大的差异。
有人可以帮助我吗?有什么区别?
SELECT ekko~ebeln
ekpo~ebelp
ekko~bstyp
ekko~bsart
ekko~lifnr
ekko~ekgrp
ekko~aedat
ekko~knumv
ekko~zterm
ekko~zbd1t
ekpo~matnr
ekpo~txz01
ekpo~menge
ekpo~meins
ekpo~netpr
ekpo~peinh
ekpo~knttp
ekpo~afnam
ekpo~wepos
INTO TABLE t_ekpo
FROM ekko
INNER JOIN ekpo ON
ekpo~ebeln EQ ekko~ebeln
WHERE ekko~lifnr IN s_lifnr
AND ekko~ekgrp IN s_ekgrp
AND ekko~ebeln IN s_ebeln
AND ekko~aedat IN s_aedat
AND ekko~bsart IN s_bsart
AND ekko~bstyp EQ 'F'
AND ekko~loekz EQ space
AND ekpo~matnr IN s_matnr
AND ekpo~ebelp IN s_ebelp
AND ekpo~loekz EQ space.
SELECT FOR ALL ENTRIES
返回 9.528 条记录
SELECT ebeln
ebelp
zekkn
vgabe
gjahr
belnr
buzei
budat
menge
shkzg
FROM ekbe
INTO TABLE t_ekbe
FOR ALL ENTRIES IN t_ekpo
WHERE ebeln EQ t_ekpo-ebeln
AND ebelp EQ t_ekpo-ebelp
AND vgabe IN ('1','2').
LOOP SELECT SINGLE
返回 7.336 条记录
LOOP AT t_ekpo INTO gs_ekpo.
CLEAR gs_ekbe.
SELECT SINGLE ebeln
ebelp
zekkn
vgabe
gjahr
belnr
buzei
budat
menge
shkzg
FROM ekbe
INTO gs_ekbe
WHERE ebeln EQ gs_ekpo-ebeln
AND ebelp EQ gs_ekpo-ebelp
AND vgabe IN ('1','2').
APPEND gs_ekbe TO T_ekbe.
ENDLOOP.
表 EKBE
具有更多键字段,而不仅仅是 EBELN
和 EBELP
,因此唯一 EBELN
/EBELP
对可以有更多的条目。有了SELECT SINGLE
,您将无法获得这些额外的条目,而您所做的FOR ALL ENTRIES
。根据您的需求,只有其中之一才能为您提供正确的数据集。
只是想补充一下。 SELECT SINGLE
LOOP
里面是非常糟糕的主意。如果您需要ebeln
+ ebelp
ekpo
只需将这两个选择到其他表lt_ekpo
(不要忘记此选择中的DISTINCT
(并将其用于FOR ALL ENTRIES
。