Два цикла выбора в один ВЫБОР?

#abap #opensql

Вопрос:

Я недавно изучал abap и работал над отдельными операциями, но затем я столкнулся с этим вопросом. Как я могу поместить эти 2 оператора select в один оператор select?

 SELECT * FROM SPFLI INTO SPFLI_WA.

      SELECT * FROM SFLIGHT INTO SFLIGHT_WA    
            WHERE CARRID = SPFLI_WA-CARRID    
             AND CONNID = SPFLI_WA-CONNID.

      ENDSELECT.

ENDSELECT.
 

Комментарии:

1. На самом деле вы бы создали представление компакт-дисков с ассоциациями сверху, а затем создали представление компакт-дисков сверху, которое содержит нужные вам поля. В ABAP редко можно было бы выполнить такое объединение вручную.

Ответ №1:

Вы можете использовать внутреннее объединение для получения соответствующих записей из другой таблицы.

 SELECT SFLIGHT~*
  INTO @SFLIGHT_WA
  FROM SFLIGHT
 INNER JOIN SPFLI ON SFLIGHT~CARRID = SPFLI~CARRID
                   AND SFLIGHT~CONNID = SPFLI~CONNID.

ENDSELECT.
 

Ответ №2:

Вот расширение правильного ответа от mkysoft, просто для удовольствия, чтобы точно имитировать исходный код ; он работает с ABAP 7.40:

 SELECT *
      INTO @DATA(spfli_sflight_wa)
      FROM spfli
      INNER JOIN sflight ON sflight~carrid = spfli~carrid
                        AND sflight~connid = spfli~connid.

  DATA(spfli_wa) = spfli_sflight_wa-spfli.
  DATA(sflight_wa) = spfli_sflight_wa-sflight.

  ...

ENDSELECT.
 

Комментарии:

1. Технически говоря, это действительно должно быть ЛЕВОЕ ВНЕШНЕЕ СОЕДИНЕНИЕ. Хороший трюк с получением разных рабочих областей.