web-dev-qa-db-ja.com

複数のテーブルから1つの内部テーブルへのSELECT FROM

私のdbテーブル:

db_1
db_2
db_3

私の内部テーブル:

it_comb

it_combには、db_1、db_2、db_3のいくつかのフィールドを持つ構造があります。

すべてのdbテーブルは異なる構造を持っています。

Db_1、db_2、db_3のすべてを選択し、where条件を使用してit_combの正しいフィールドに入力します。

私はこのようなことをしたいと思います:(これは動作しません)

SELECT * From db_1, db_2, db_3 into CORRESPONDING FIELDS OF TABLE it_comb WHERE db_1-MATNR LIKE db_2-MATNR AND db_1-MATNR LIKE db_3-MATNR.

明らかに、これは、「、」を使用できないため機能しません。 ABAPでこれをどのように書くのですか?そのため、it_combには、db_1、db_2、およびdb_3からのデータが入力されます。

別の問題は、it_combに何かを選択するたびに、以前のデータが上書きされることです。

コード例はABAP-Beginnerで高く評価されます。

3
KevinMueller

内部結合を使用できます-

SELECT * APPENDING CORRESPONDING FIELDS OF TABLE it_comb
FROM db_1 AS a
INNER JOIN db_2 AS b
ON a~matnr = b~matnr
INNER JOIN db_3 AS c
ON a~matnr = c~matnr
WHERE (Your any other condition).

APPENDINGは、内部テーブルit_combの前のレコードを上書きしません。

警告:内部テーブルがTYPE STANDARDの場合はAPPENDINGを使用してください。それ以外の場合はダンプを取得します。また SELECT-JOINドキュメントを確認してください

4
divScorp

新しいABAPバージョンで実行できるもう1つのことは、

select * from mara inner join mvke on mvke~matnr = mara~matnr into table @data(lt_combined).    
loop at lt_combined into data(ls_combined).
  write: / ls_combined-mara-matnr, ls_combined-mvke-vkorg.
endloop.

これにより、個別の「データ」ステートメントを必要とせずに、1つのステップで内部テーブルを定義してデータを設定します。

*を使用した結合では、テーブル名に基づいて部分構造を持つ内部テーブルを取得することに注意してください。構造はselectのフィールドリストに含まれているため、より効率的なデータベースクエリのために、次のようなこともできます。 (したがって、すべてのフィールドを返す必要はありません)これにより、部分構造も削除されます。

select mara~matnr, mvke~vkorg from mara inner join mvke on mvke~matnr = mara~matnr into table @data(lt_combined).
loop at lt_combined into data(ls_combined).
  write: / ls_combined-matnr, ls_combined-vkorg.
endloop.

お役に立てれば!

1
TallDave

JOINを使用せずに、次のようにSELECTステートメントを1つずつ実行しました

data it_comb type TABLE OF vbak.

select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM vbak UP TO 10 ROWS.
select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM vbrk UP TO 10 ROWS.
select * APPENDING CORRESPONDING FIELDS OF TABLE it_comb FROM likp UP TO 10 ROWS.
0
Eralper