我的问题:
我"loop"
将一个表复制到一个名为ls_eban的本地结构体。有了这些信息,我必须遵循以下说明:
- ls_eban-matnr 必须在表zmd_scmi_st01中。控制表(global))
- ls_eban-werks 必须在表zmd_scmi_st05中控制表(global))
- ls_eban-knttp 必须在表zmd_scmi_st06中控制表(global))
我需要一个清晰和高效的选择。我实际上有一个,但是它根本没有性能。
我的解决方案:
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'.
我还必须说,控制表之间没有任何关系(没有主键和从键)。
首先不应该在循环中使用select。而不是
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在评论中提到的),可能会有更多的低效需要纠正。例如,控制表上真的没有键吗?)但是循环中的select是我首先想到的