1. 程式人生 > >對於不能join的表,使用for all entries in語句將該表與內表串聯。

對於不能join的表,使用for all entries in語句將該表與內表串聯。

像bseg這樣的表不是transparent table所以不能做inner join。在這種情況下,可以先從其他表中選出資料放到itab中,然後使用for all entries 語句來串聯。

如下:

  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 ).
上面語句中itab_main是從BSIS中選出的資料。由於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所以這部分不包括在括號中。而bseg與itab_main串聯的內容應該全部包括在"( )"中。

2-FOR ALL ENTRIES IN在實際執行時是將itab_main中的每一行對應一條select語句然後用類似loop的方式select多次來選取資料的,所以速度慢應儘量避免使用。