Abap “中的元素”;选择列表";列表必须用逗号分隔

Abap “中的元素”;选择列表";列表必须用逗号分隔,abap,Abap,我想执行以下选择,但它返回了一个错误,我不知道该怎么做 “选择列表”列表中的元素必须用逗号分隔 我的版本是NW7.4。有人能帮我吗 TYPES : BEGIN OF ty_meal, carrid TYPE smeal-carrid, mealnumber TYPE smeal-mealnumber, text TYPE smealt-text, END OF ty_meal, ty_

我想执行以下选择,但它返回了一个错误,我不知道该怎么做

“选择列表”列表中的元素必须用逗号分隔

我的版本是NW7.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'.

您需要用逗号分隔
选择的列,如下所示

选择smeal~carrid、smeal~mealnumber、smealt~text
进餐
来自斯梅尔
左连接smealt
关于smeal~carrid=smeal~carrid
和smealt~mealnumber=smeal~mealnumber
其中smealt~sprache EQ‘E’。

在7.40 SP05版本之前,您不能使用
WHERE
子句对左侧外部联接中“right”表的列进行筛选(:“在外部联接中,包含数据库表中的列的所有比较或右侧的view dbtab_[…]在同一SELECT语句的WHERE条件中,不允许将这些列作为操作数。“)

此限制是合乎逻辑的,因为如果左表中只有一行,则右表的所有列都被视为“null”,因此,如果右表的某列上有选择,则不会选择该行(除非使用了
为null

正确的方法是在
上的
中定义条件:

  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
选择smeal~carrid smeal~mealnumber smealt~文本
吃饭
来自斯梅尔
左连接smealt
关于smeal~carrid=smeal~carrid
和smealt~mealnumber=smeal~mealnumber

和smealt~sprache EQ‘E’。“我已经解决了我的问题。是mandt,我正试图用mandt进行选择
ON(aufk~mandt EQ afih~mandt和aufk~aufnr EQ afih~aufnr)
但没必要,我改成
ON(aufk~aufnr EQ afih~aufnr)

这不起作用。当我用“内部连接”更改“左连接”时,它会起作用。你知道为什么吗?:请描述(1)你的预期,(2)实际结果与你的预期相差多远,(3)修改您的代码,使其成为一个功能性的、最小的工作示例,包括您使用的所有主机变量的定义?顺便说一句:当加入客户机依赖表时,
MANDT
列将自动进行比较。您只能在“SELECT”语句中同时使用一个外部联接。'LEFT join'是一个外部联接,t(不清楚)这条消息是因为您的ABAP SQL代码有一个功能,它只能在严格模式下工作(需要逗号,@在ABAP变量前面,等等)。相关的功能是对“left join”表的列进行过滤(我想这是因为,仅在严格模式下)@konstantin抱歉,这是1960年。你可以清楚地看到ABAP中的比较,因为它们以
IF
开始,在ABAP中
IF
之后绝对没有办法做作业。看看我的选择现在如何,但还不起作用。@AlisonVieira Stack Overflow是一个有规则的论坛。其中之一是提供一个目前情况并非如此:您不能复制代码,但必须重新创建一个用于堆栈溢出的代码,如链接中明确解释的。请尝试使用我提出的可复制代码,您可以看到它解决了您的问题(我也尝试了您的代码,花了时间编写缺少的代码(!!),并且成功)。注意:我必须恢复您的问题修订版(或者其他超级用户会这样做)。