以前,如果依据内表作为查询条件时,需要使用for all entries in语法。使用该语法时,由如下注意事项:
1. 要检查内表是否为空。内表为空时,查询条件相当于*,会查询所有;
2. 会对查询结果自动去重
现在SQL支持inner join 内表,把内表当作库表使用,不会有for all entries in的问题;
DATA: lt_spfli TYPE TABLE OF spfli.
* Case 1: 内表为空, for all entries in时将sflight表记录全部查询出来
SELECT * FROM sflight INTO TABLE @DATA(lt_sflight)
FOR ALL ENTRIES IN @lt_spfli
WHERE carrid = @lt_spfli-carrid.
* Case 2: inner join内表,查询符合条件的数据
" 该例中内表为空,所以查询失败
" 这种方法不会对结果进行去重;for all entries会对结果去重
SELECT sflight~CARRID,
sflight~CONNID,
sflight~FLDATE
FROM sflight
INNER JOIN @lt_spfli as itab
ON sflight~carrid = itab~carrid
INTO TABLE @DATA(lt_result).