我想从透明表中获取那些不存在于FOR ALL中的FOR ALL ENTRIES中的记录。默认逻辑包含内部表中存在的那些条目,我希望排除那些在内部表中具有对应记录的条目。我想要一些FOR ALL ENTRIES NOT IN声明。有没有解决方法?
答案 0 :(得分:2)
好吧,在闲置8年之后,我可以为我的问题提出可能的解决方案。
Since release 7.52 ABAP允许将itab用作SELECT语句的数据源,因此上述任务可以简化为将NOT EXISTS子查询附加为FOR ALL ENTRIES itab作为数据源:
示例编码:
* 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数据库上运行,也许还可以在其他几个数据库上运行。
答案 1 :(得分:1)
我不认为是否有可能。我会使用范围。如果这不合适,可以使用循环+读表。
答案 2 :(得分:0)
您可以针对此问题使用简单查询。
检查此编码......
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.