-1

我的问题:

我将一个表“循环”到一个名为 ls_eban.. 的本地结构中。

有了这些信息,我必须遵循以下说明:

  1. ls_eban-matnr必须在表 zmd_scmi_st01 中(1.控制表(全局))
  2. ls_eban-werks必须在表 zmd_scmi_st05 中(2.控制表(全局))
  3. ls_eban-knttp必须在表 zmd_scmi_st06 中(3.控制表(全局))

我需要一个清晰且高效的选择。我实际上有一个,但它根本没有性能。

我的解决方案:

SELECT st01~matnr st05~werks st06~knttp
  FROM       zmd_scmi_st01 AS st01
  INNER JOIN zmd_scmi_st05 AS st05
  ON         st05~werks = ls_eban-werks
  INNER JOIN zmd_scmi_st06 AS st06
  ON         knttp = ls_eban-knttp
INTO TABLE   lt_control
WHERE        st01~matnr = ls_eban-matnr AND st01~bedarf = 'X'
  AND        st05~bedarf = 'X'.

我还不得不说,控制表之间没有任何关系(没有主键和辅助键)。

4

1 回答 1

0

您不应该做的第一件事是在循环内进行选择。代替

loop at lt_eban into ls_eban.
      Select ....
endloop.

你应该做一个单一的选择。

if lt_eban[] is not initial.
   select ...
     into table ...
     from ...
      for all entries in lt_eban
    where ...
endif.

如果我们有更多信息(如 vwegert 的评论中所述。例如,控制表上真的没有键?),可能会有更多的低效率需要纠正,但循环中的选择是第一件事。

于 2013-03-01T14:13:41.207 回答