使用 FOR ALL ENTRIES 连接各种表
Joining various tables using FOR ALL ENTRIES
我创建了一种从表中获取数据的方法。
我的导入参数是 IV_RCP_NO、IV_VERS、IV_ALT,导出参数是 ET_TABLE.
现在我正在使用 INNER JOIN 来连接 4 个表,但要求说应该使用 FOR ALL ENTRIES 子句来完成。
有人可以帮我继续吗?
这是我的代码:
SELECT RCP_TBL~SEARCH_TERM PLNT_TBL~PLANT DESCR_TBL~DESCR RCP_STATUS~DESCR
INTO TABLE ET_TABLE
FROM ESTRH AS ESTRH_TBL
INNER JOIN /PLMB/RCP_RECIPE AS RCP_TBL
ON ESTRH_TBL~RECN = RCP_TBL~SUBRECN
INNER JOIN /PLMB/SAM_NODE_T AS RCP_STATUS
ON RCP_STATUS~STATUS_ID = RCP_TBL~STATUS
INNER JOIN /PLMB/RCP_PLNT AS PLNT_TBL
ON RCP_TBL~RCP_GUID = PLNT_TBL~RCP_GUID
INNER JOIN /PLMB/RCP_DESCR AS DESCR_TBL
ON PLNT_TBL~RCP_GUID = DESCR_TBL~OBJECT_GUID
AND RCP_TBL~RCP_GUID = DESCR_TBL~OBJECT_GUID
WHERE SUBID = IV_RCP_NO AND ALT_NO = IV_ALT AND VERS_NO = IV_VERS.
您可以参考下面的代码-
* Local structure
TYPES: BEGIN OF ty_estrth,
subid TYPE esesubid,
recn TYPE eserecn,
END OF ty_estrth.
* Internal table
DATA: lt_estrh TYPE STANDARD TABLE OF ty_estrth.
SELECT subid recn FROM estrh
INTO TABLE lt_estrh
WHERE subid = iv_rcp_no.
IF lt_estrh IS NOT INITIAL.
SELECT * FROM /plmb/rcp_recipe
INTO TABLE lt_rcp_recipe "Internal table of type /PLMB/RCP_RECIPE
FOR ALL ENTRIES IN lt_estrh
WHERE subrecn = lt_estrh-recn
AND alt_no = iv_alt AND vers_no = iv_vers.
IF lt_rcp_recipe IS NOT INITIAL.
SELECT * FROM /plmb/sam_node_t
INTO TABLE lt_sam_node_t "Internal table of type /PLMB/SAM_NODE_T
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE status_id = lt_rcp_recipe-status.
SELECT * FROM /plmb/rcp_plnt
INTO TABLE lt_rcp_plnt " Internal table of type /PLMB/RCP_PLNT
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE rcp_guid = lt_rcp_recipe-rcp_guid.
SELECT * FROM /plmb/rcp_descr
INTO TABLE lt_rcp_descr " Internal table of type /PLMB/RCP_DESCR
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE rcp_guid = lt_rcp_recipe-rcp_guid.
ENDIF.
ENDIF.
您将在下面的内部 tables
中获取您的数据
lt_rcp_recipe
lt_sam_node_t
lt_rcp_plnt
lt_rcp_descr
最好声明一个本地结构,其中包含您要读取的特定字段,正如我在上面声明的那样。之后你必须在导出 table ET_TABLE
.
中读取和填充数据
如果可以在没有所有条目的情况下完成连接,那么就这样做。这将产生最佳性能。
For all entries 是一种工具,用于简化您已经在内部 table 中拥有部分数据的查询,这些数据来自一些先前执行的代码或预计算。它有效地导致一系列独立的选择,其结果在单独完成后合并 - 这意味着这会导致多次数据库往返,这会大大降低性能。
如果您有针对所有条目应用 的特定要求,您应该阐明数据的哪一部分已经存在并且需要以这种方式加入。否则来自 Whosebugers 的任何建议将仍然是低效的猜测。
我创建了一种从表中获取数据的方法。 我的导入参数是 IV_RCP_NO、IV_VERS、IV_ALT,导出参数是 ET_TABLE.
现在我正在使用 INNER JOIN 来连接 4 个表,但要求说应该使用 FOR ALL ENTRIES 子句来完成。
有人可以帮我继续吗?
这是我的代码:
SELECT RCP_TBL~SEARCH_TERM PLNT_TBL~PLANT DESCR_TBL~DESCR RCP_STATUS~DESCR
INTO TABLE ET_TABLE
FROM ESTRH AS ESTRH_TBL
INNER JOIN /PLMB/RCP_RECIPE AS RCP_TBL
ON ESTRH_TBL~RECN = RCP_TBL~SUBRECN
INNER JOIN /PLMB/SAM_NODE_T AS RCP_STATUS
ON RCP_STATUS~STATUS_ID = RCP_TBL~STATUS
INNER JOIN /PLMB/RCP_PLNT AS PLNT_TBL
ON RCP_TBL~RCP_GUID = PLNT_TBL~RCP_GUID
INNER JOIN /PLMB/RCP_DESCR AS DESCR_TBL
ON PLNT_TBL~RCP_GUID = DESCR_TBL~OBJECT_GUID
AND RCP_TBL~RCP_GUID = DESCR_TBL~OBJECT_GUID
WHERE SUBID = IV_RCP_NO AND ALT_NO = IV_ALT AND VERS_NO = IV_VERS.
您可以参考下面的代码-
* Local structure
TYPES: BEGIN OF ty_estrth,
subid TYPE esesubid,
recn TYPE eserecn,
END OF ty_estrth.
* Internal table
DATA: lt_estrh TYPE STANDARD TABLE OF ty_estrth.
SELECT subid recn FROM estrh
INTO TABLE lt_estrh
WHERE subid = iv_rcp_no.
IF lt_estrh IS NOT INITIAL.
SELECT * FROM /plmb/rcp_recipe
INTO TABLE lt_rcp_recipe "Internal table of type /PLMB/RCP_RECIPE
FOR ALL ENTRIES IN lt_estrh
WHERE subrecn = lt_estrh-recn
AND alt_no = iv_alt AND vers_no = iv_vers.
IF lt_rcp_recipe IS NOT INITIAL.
SELECT * FROM /plmb/sam_node_t
INTO TABLE lt_sam_node_t "Internal table of type /PLMB/SAM_NODE_T
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE status_id = lt_rcp_recipe-status.
SELECT * FROM /plmb/rcp_plnt
INTO TABLE lt_rcp_plnt " Internal table of type /PLMB/RCP_PLNT
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE rcp_guid = lt_rcp_recipe-rcp_guid.
SELECT * FROM /plmb/rcp_descr
INTO TABLE lt_rcp_descr " Internal table of type /PLMB/RCP_DESCR
FOR ALL ENTRIES IN lt_rcp_recipe
WHERE rcp_guid = lt_rcp_recipe-rcp_guid.
ENDIF.
ENDIF.
您将在下面的内部 tables
中获取您的数据lt_rcp_recipe
lt_sam_node_t
lt_rcp_plnt
lt_rcp_descr
最好声明一个本地结构,其中包含您要读取的特定字段,正如我在上面声明的那样。之后你必须在导出 table ET_TABLE
.
如果可以在没有所有条目的情况下完成连接,那么就这样做。这将产生最佳性能。
For all entries 是一种工具,用于简化您已经在内部 table 中拥有部分数据的查询,这些数据来自一些先前执行的代码或预计算。它有效地导致一系列独立的选择,其结果在单独完成后合并 - 这意味着这会导致多次数据库往返,这会大大降低性能。
如果您有针对所有条目应用 的特定要求,您应该阐明数据的哪一部分已经存在并且需要以这种方式加入。否则来自 Whosebugers 的任何建议将仍然是低效的猜测。