JOIN 的 4 tables,如何限制 SELECT 列只有一个 table?
JOIN of 4 tables, how to restrict SELECT columns to one table only?
我正在开发 ABAP 程序 - 用户输入是查询列 ANLAGE
,输出是从 table EADZ
获取所有记录(并且只有 [=14= 的字段) ]) 基于 ANLAGE
.
语句和连接应该像这样工作:
- 输入
ANLAGE
,在tableEASTL
中查找,得到LOGIKNR
- 输入
LOGIKNR
,在tableEGERR
中查找,得到EQUNR
- 输入
EQUNR
,在tableETDZ
中查找,得到LOGIKZW
- 输入
LOGIKZW
,在table中查找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.
我从 table EADZ
获得了记录,除了日期字段是空的(尽管它们已填入数据库 table)。我假设 JOIN 存在问题,因为在这样的语句中,我将所有 4 个 table 的所有字段连接到一个 "record",然后连接到内部 table.[= 的相应字段29=]
如何获取日期字段的值?
你可以在documentation中找到答案。
If a column name appears multiple times and no alternative column name was granted, the last column listed is assigned.
在您的例子中,至少有两个 table 共享相同的列名。因此,最后提到的 table 中的值用于联接。
您可以通过显式列出列(或 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.
我正在开发 ABAP 程序 - 用户输入是查询列 ANLAGE
,输出是从 table EADZ
获取所有记录(并且只有 [=14= 的字段) ]) 基于 ANLAGE
.
语句和连接应该像这样工作:
- 输入
ANLAGE
,在tableEASTL
中查找,得到LOGIKNR
- 输入
LOGIKNR
,在tableEGERR
中查找,得到EQUNR
- 输入
EQUNR
,在tableETDZ
中查找,得到LOGIKZW
- 输入
LOGIKZW
,在table中查找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.
我从 table EADZ
获得了记录,除了日期字段是空的(尽管它们已填入数据库 table)。我假设 JOIN 存在问题,因为在这样的语句中,我将所有 4 个 table 的所有字段连接到一个 "record",然后连接到内部 table.[= 的相应字段29=]
如何获取日期字段的值?
你可以在documentation中找到答案。
If a column name appears multiple times and no alternative column name was granted, the last column listed is assigned.
在您的例子中,至少有两个 table 共享相同的列名。因此,最后提到的 table 中的值用于联接。
您可以通过显式列出列(或 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.