Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Loops 选择所有条目与在ABAP中循环选择单个条目_Loops_Select_Abap_Opensql - Fatal编程技术网

Loops 选择所有条目与在ABAP中循环选择单个条目

Loops 选择所有条目与在ABAP中循环选择单个条目,loops,select,abap,opensql,Loops,Select,Abap,Opensql,我正在比较所有条目的SELECT与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~

我正在比较所有条目的
SELECT
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.
选择所有条目
返回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 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.
循环选择单个
返回7.336条记录

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 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
对,可以有更多的条目。使用
选择SINGLE
您将不会获得这些额外的条目,而使用
为所有条目获得这些额外条目。根据您的需要,其中只有一个将为您提供正确的数据集。

只需添加。
循环中选择SINGLE
是一个非常糟糕的主意。
如果您需要
ebeln
+
ebelp
ekpo
中选择这两个到附加表
lt_ekpo
(不要忘记
DISTINCT
),并将其用于
所有条目

您的意思是运行时的差异,或者在T_ekbe表中的实际结果中?T_ekpo是一个排序表吗?他还需要小心,因为如果T_ekpo恰好为空,“FOR ALL ENTRIES”不会像您预期的那样选择任何记录,而是选择所有记录(符合WHERE子句)。