使用 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 的任何建议将仍然是低效的猜测。