SELECT FROM DB_TABLE具有左连接,其中连接表中的列

时间:2019-04-10 18:14:31

标签: sql sap abap opensql

我想创建一个左连接多个表的选择。

在下面的代码中,我只需要选择表EKPO的行,其中列EBELN =变量lv_ebeln。但是,只要将此条件添加到WHERE,我就会收到以下语法错误:

  

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

那么,有没有一种方法可以添加此条件?

DATA: BEGIN OF wa_itab,
        gjahr TYPE rseg-gjahr,
        ebelp TYPE ekpo-ebelp,
      END OF wa_itab,
      itab     LIKE TABLE OF wa_itab,
      lv_belnr TYPE rseg-belnr,
      lv_ebeln TYPE ekpo-ebeln.

SELECT rseg~gjahr ekpo~ebelp FROM rseg
  LEFT JOIN ekpo ON rseg~ebeln = ekpo~ebeln AND rseg~ebelp = ekpo~ebelp
  INTO (wa_itab-gjahr, wa_itab-ebelp )
  WHERE rseg~belnr = lv_belnr 
    AND ekpo~ebeln = lv_ebeln. " <=== SYNTAX ERROR because of this line

  ...
  " some other code
  ...

  APPEND wa_itab TO itab.
ENDSELECT.

1 个答案:

答案 0 :(得分:4)

语法错误消息具有误导性,不需要逗号,因为问题与OpenSQL strict mode无关。

真正的错误在于,在左外部联接中,EKPO中不接受右表WHERE上的条件,因为如果联接结果中只有来自左表{{ 1}},右表RSEG中的列将具有值EKPO,因此基于右表列的条件为false且未选择行,从而使左外部联接的行为类似于内部联接。

  • 要么使用内部联接,然后使用null中的条件(不需要)。
  • 或者保留左外部联接,然后将条件移动到WHERE联接条件,如下所示。

代码:

ON

PS:在ABAP文档中找不到正式解释它的参考,除非有close example

SELECT rseg~gjahr ekpo~ebelp FROM rseg
  LEFT JOIN ekpo ON rseg~ebeln = ekpo~ebeln 
                AND rseg~ebelp = ekpo~ebelp
                AND ekpo~ebeln = lv_ebeln " <=== move it here
  INTO (wa_itab-gjahr, wa_itab-ebelp )
  WHERE rseg~belnr = lv_belnr.