Отменить для ВСЕХ ЗАПИСЕЙ в запросе SELECT?

Я хочу получить из прозрачной таблицы те записи, которые не существуют в вкладке FOR ALL ENTRIES.

Хотя логика по умолчанию состоит в том, чтобы включить те записи, которые существуют во внутренней таблице, я хочу их исключить. Мне нужен какой-то тип оператора FOR ALL ENTRIES NOT IN.

Есть ли обходной путь?


person Suncatcher    schedule 12.06.2012    source источник
comment
Ответ зависит от количества записей, которые необходимо исключить, мы говорим о десятках, сотнях, тысячах, десятках тысяч или большем количестве?   -  person tomdemuyt    schedule 13.06.2012
comment
Думаю, там (десять) тысяч записей.   -  person Suncatcher    schedule 13.06.2012
comment
См. Должны ли вопросы включать «теги» в свои заголовки? , где нет единого мнения, не должны!   -  person    schedule 11.12.2015


Ответы (3)


Что ж, после 8 лет простоя я могу предложить возможное решение своей проблемы.

Начиная с версии 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 и, возможно, с парой других.

person Suncatcher    schedule 27.01.2020
comment
С ограничением, что этот оператор не может быть выполнен во всех системах баз данных. HANA допускает эту функцию. - person Sandra Rossi; 30.01.2020
comment
Спасибо, Сандра, поправила ответ. У меня сейчас нет 7,52, поэтому я не могу проверить, это было только приблизительное предположение. Не могли бы вы дать ссылку на какую-нибудь документацию? Интересно прочитать объяснение - person Suncatcher; 31.01.2020
comment
Упомянутый мной текст взят из документации, которую вы связали (и есть дополнительная информация здесь). У меня 7.52, и я мог бы успешно протестировать его на HANA 2.0, возможно, другие базы данных поддерживают его, но он не работает, по крайней мере, с Sybase ASE 16.0. Обратите внимание, что вы можете проверить, есть ли в базе данных функция: IF cl_abap_dbfeatures=>use_features( EXPORTING requested_features = VALUE #( ( cl_abap_dbfeatures=>itabs_in_from_clause ) ) ). - person Sandra Rossi; 31.01.2020
comment
Спасибо, протестирую на других базах, так как у меня есть шанс - person Suncatcher; 31.01.2020

Не думаю, что это возможно. Я бы использовал для этого диапазоны. Если это не подходит, можно использовать цикл + таблица чтения.

person mars    schedule 12.06.2012

Вы можете использовать простой запрос для этой проблемы.

Проверьте эту кодировку ...

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.
person Dhivya    schedule 13.06.2012
comment
Рабочее решение, но не очень эффективное. - person Suncatcher; 13.12.2015