我想从FOR ALL ENTRIES itab 中不存在的透明表中获取那些记录。
虽然默认逻辑是包含内部表中存在的那些条目,但我想排除它们。我想要某种类型的 FOR ALL ENTRIES NOT IN 语句。
有什么解决方法吗?
好吧,在闲置 8 年后,我可以为我的问题提出可能的解决方案。
由于版本 7.52 ABAP 允许将 itab 作为 SELECT 语句的数据源,因此上述任务可以简化为以 FOR ALL ENTRIES itab 作为数据源附加 NOT EXISTS 子查询:
示例编码:
* filling FOR ALL ENTRIES table
SELECT *
FROM spfli
INTO TABLE @DATA(lt_exclude_FAE)
WHERE carrid = s~carrid AND
connid = s~connid AND
cityfrom = 'NEW YORK'
* excluding FAE rows
SELECT *
FROM sflight AS s
WHERE seatsocc < s~seatsmax AND
NOT EXISTS ( SELECT *
FROM @lt_exclude_FAE AS exclude
WHERE carrid = s~carrid AND
connid = s~connid AND
cityfrom = s~cityfrom )
INTO TABLE @DATA(flights_wo_ny).
不过,现在这肯定只在 HANA 数据库上有效,也许在其他几个数据库上有效。
我不认为这是否可能。我会为此使用范围。如果这不合适,可以使用循环+读表。
您可以对这个问题使用简单的查询。
检查此编码...
TABLES : table1 , table2 .
DATA : it_table1 TYPE STANDARD TABLE OF table1 ,
it_table2 TYPE STANDARD TABLE OF table2 ,
wa_table1 TYPE table1 ,
wa_table2 TYPE table2 .
SELECT * FROM table1 INTO CORRESPONDING FIELDS OF TABLE it_table1 .
LOOP AT it_table1 INTO wa_table1 .
SELECT field1 FROM table2 INTO CORRESPONDING FIELDS OF TABLE it_table2 WHERE field2 = wa_table1-field1 .
IF sy-subrc = 0 .
delete TABLE it_table1 FROM wa_table1 .
ENDIF.
ENDLOOP.