我正在研究ABAP程序-用户输入是查询列ANLAGE
,输出是根据ANLAGE
从表EADZ
(并且仅EADZ
字段(中获取所有记录。
语句和联接应按如下方式工作:
- 输入
ANLAGE
,在表EASTL
中找到,得到LOGIKNR
- 输入
LOGIKNR
,在表EGERR
中找到,得到EQUNR
- 输入
EQUNR
,在表ETDZ
中找到,得到LOGIKZW
- 输入
LOGIKZW
,在表EADZ
中查找,获取所有记录(这是最终输出(
这是我尝试过的代码:
DATA: gt_cas_rezy TYPE STANDARD TABLE OF eadz,
lv_dummy_eanl LIKE eanl-anlage.
SELECT-OPTIONS: so_anl FOR lv_dummy_eanl NO INTERVALS NO-EXTENSION.
SELECT * FROM eadz
INNER JOIN etdz ON eadz~logikzw EQ etdz~logikzw
INNER JOIN egerr ON etdz~equnr EQ egerr~equnr
INNER JOIN eastl ON egerr~logiknr EQ eastl~logiknr
INTO CORRESPONDING FIELDS OF TABLE @gt_cas_rezy
WHERE eastl~anlage IN @so_anl.
我从表EADZ
中获取了记录,除了日期字段为空(即使它们已填充在数据库表中(。我假设 JOIN 存在问题,因为在这样的语句中,我将所有 4 个表的所有字段连接到一个"记录"中,然后连接到内部表的相应字段。
如何获取日期字段的值?
您可以在文档中找到答案。
如果列名多次出现,并且未授予备用列名,则分配列出的最后一列。
在您的情况下,至少两个表共享相同的列名。因此,在连接中使用最后提到的表中的值。
您可以通过显式列出列(或 eadz~* 在您的例子中(来解决此问题,如果需要,请提供别名。
SELECT EADZ~* FROM EADZ INNER JOIN ETDZ ON EADZ~LOGIKZW = ETDZ~LOGIKZW
INNER JOIN EGERR ON ETDZ~EQUNR = EGERR~EQUNR
INNER JOIN EASTL ON EGERR~LOGIKNR = EASTL~LOGIKNR
INTO CORRESPONDING FIELDS OF TABLE @gt_cas_rezy
WHERE EASTL~ANLAGE IN @SO_ANL.
如果您需要其他字段,您可以使用例如EADZ~*,EASTL~A明确添加它们。