0

我想从FOR ALL ENTRIES itab 中存在的透明表中获取那些记录。

虽然默认逻辑是包含内部表中存在的那些条目,但我想排除它们。我想要某种类型的 FOR ALL ENTRIES NOT IN 语句。

有什么解决方法吗?

4

3 回答 3

3

好吧,在闲置 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 数据库上有效,也许在其他几个数据库上有效。

于 2020-01-27T13:02:11.040 回答
1

我不认为这是否可能。我会为此使用范围。如果这不合适,可以使用循环+读表。

于 2012-06-12T20:51:18.520 回答
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.
于 2012-06-13T05:13:45.097 回答