Элементы в списке «SELECT LIST» должны быть разделены запятыми - PullRequest
0 голосов
/ 29 октября 2019

Я хочу сделать следующий выбор, но он вернул ошибку, которую я не знаю, что делать.

Элементы в списке «SELECT LIST» должны быть разделены запятыми.

Моя версия - NW 7.4. Кто-нибудь может мне помочь?

TYPES : BEGIN OF ty_meal,
          carrid     TYPE smeal-carrid,
          mealnumber TYPE smeal-mealnumber,
          text       TYPE smealt-text,
        END OF ty_meal,
        ty_meal_s TYPE STANDARD TABLE OF ty_meal WITH EMPTY KEY.
DATA meals TYPE ty_meal_s.

SELECT smeal~carrid smeal~mealnumber smealt~text
  INTO TABLE meals
  FROM smeal
    LEFT JOIN smealt 
        ON smealt~carrid = smeal~carrid
        AND smealt~mealnumber = smeal~mealnumber
  WHERE smealt~sprache EQ 'E'.

Ответы [ 3 ]

5 голосов
/ 29 октября 2019

Вам нужно разделить запятые SELECT запятыми, как это

SELECT smeal~carrid, smeal~mealnumber, smealt~text
  INTO TABLE @meals
  FROM smeal
    LEFT JOIN smealt 
        ON smealt~carrid = smeal~carrid
        AND smealt~mealnumber = smeal~mealnumber
  WHERE smealt~sprache EQ 'E'.
3 голосов
/ 29 октября 2019

Перед выпуском 7.40 SP05 нельзя использовать предложение WHERE для фильтрации по столбцу «правой» таблицы в LEFT OUTER JOIN ( ABAP 7.31 doc : «Во внешних объединениях все сравнениякоторые содержат столбцы из таблицы базы данных или представления dbtab_right справа [...] Эти столбцы не допускаются в качестве операндов в условии WHERE того же оператора SELECT. ")

Это ограничение было логичным, потому что еслиодна строка находится только в левой таблице, все столбцы правой таблицы считаются «нулевыми», поэтому, если в столбце правой таблицы есть выделение, строка не будет выделена (кроме случаев использования IS NULL).

Правильный способ - определить условие в ON:

  SELECT smeal~carrid smeal~mealnumber smealt~text
    INTO TABLE meals
    FROM smeal
      LEFT JOIN smealt
          ON smealt~carrid = smeal~carrid
          AND smealt~mealnumber = smeal~mealnumber
          AND smealt~sprache EQ 'E'.                 " <==== move it from WHERE to ON
0 голосов
/ 31 октября 2019

Я решил свою проблему. Это мандат, я пытался сделать выбор с мандатом ON ( aufk~mandt EQ afih~mandt AND aufk~aufnr EQ afih~aufnr ), но в этом нет необходимости. Я изменил на ON (aufk~aufnr EQ afih~aufnr )

...