排除FOR ALL ENTRIES itab的行

时间:2012-06-12 18:17:57

标签: for-loop abap opensql

我想从透明表中获取那些存在于FOR ALL中的FOR ALL ENTRIES中的记录。默认逻辑包含内部表中存在的那些条目,我希望排除那些在内部表中具有对应记录的条目。我想要一些FOR ALL ENTRIES NOT IN声明。有没有解决方法?

3 个答案:

答案 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.