连接 4 个表,如何将 SELECT 列限制为仅一个表?



我正在研究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明确添加它们。

相关内容

  • 没有找到相关文章

最新更新