我的问题:
我将表“循环”到名为ls_eban的本地结构中。
有了这些信息,我必须遵循这些说明:
我需要一个清晰且高效的选择。我实际上有一个,但它根本不具备高性能。
我的解决方案:
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'.
我还必须说,控制表之间没有任何关系(没有主键,也没有辅助键)。
答案 0 :(得分: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的评论中提到的那样,可能会有更多的低效率需要纠正。例如,控制表上真的没有键吗?)但是循环中的select是第一个跳出来的东西在我身边。