我想创建一个左连接多个表的选择。
在下面的代码中,我只需要选择表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.
答案 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.