SELECT FROM multiple tables INTO one internal Table

SELECT FROM multiple tables INTO one internal Table

我的数据库 tables:

db_1
db_2
db_3

我的内部 table:

it_comb

it_comb 的结构包含 db_1、db_2、db_3.

中的一些字段

所有数据库 table 都有不同的结构。

我想 select 从 db_1、db_2、db_3 到 it_comb 的正确字段,带有 where 条件。

我想做这样的事情:(这行不通)

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.

的数据

另一个问题是,每次我 select 将某些东西放入 it_comb 时,我以前的数据都会被覆盖。

对于 ABAP 初学者,代码示例将不胜感激。

您可以使用内部联接 -

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 不会覆盖之前来自内部的记录 table it_comb.

警告:如果内部 table 是 TYPE STANDARD,请使用 APPENDING,否则你会得到转储。 还有check the SELECT - JOIN documentaion

没有JOIN我执行了SELECT条语句如下

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.

您可以在较新的 ABAP 版本中做的另一件事是

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.

这将在一个步骤中定义和填充您的内部 table,而无需单独的 "data" 语句。

请注意,在与 * 的联接中,您将获得一个内部 table,其子结构基于 table 名称——因为该结构隐含在 [= 的字段列表中22=],你也可以做这样的事情以获得更有效的数据库查询(因此它不需要 return 所有字段),这也消除了子结构:

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.

希望对您有所帮助!