2013-10-09 64 views
2

我在比較SELECT FOR ALL ENTRIES vs LOOP SELECT SINGLE和我在結果上有很大的區別。SELECT FOR ALL ENTRIES vs LOOP SELECT SINGAPE ABAP

Sombody可以幫我一下嗎?它有什麼不同?

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' "Pedido 
    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選擇單 - 選舉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. 

謝謝!

+0

你的意思是運行時差異,或者T_ekbe表中的實際結果? – norbip

+0

是t_ekpo有序表嗎? –

回答

7

表EKBE擁有比EBELN和EBELP更多的關鍵字段,因此可以有更多的條目用於唯一的EBELN/EBELP對。使用SELECT SINGLE,您不會得到這些「額外」條目,並且不會獲得您所做的所有條目。根據您的需要,只有其中一個會爲您提供正確的數據集。

+1

他還需要小心,因爲如果t_ekpo恰好爲空,「FOR ALL ENTRIES」不會像您期望的那樣選擇任何記錄,而是會選擇所有記錄(符合WHERE子句)。 – omnibrain

1

只是想添加。 在LOOP裏面選擇單個是非常糟糕的主意。 如果您需要ekpo的ebeln + ebelp,只需將這兩個選項放入其他表lt_ekpo(不要忘記在此選擇中使用DISTINCT)並將其用於FOR ALL ENTRIES。