-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

最初にすべきでないことは、ループ内に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のコメントで述べられているように、実際にはコントロールテーブルにキーがありませんか?)、修正する必要のある非効率性が増える可能性がありますが、ループ内の選択が最初に飛び出します。

于 2013-03-01T14:13:41.207 に答える