Select 从多个表中选择一个内部表

Select 从多个表中选择一个内部表,select,abap,Select,Abap,我的数据库表: db_1 db_2 db_3 我的内部表格: it_comb 它有一个结构,包含来自db_1、db_2、db_3的一些字段 所有数据库表都有不同的结构 我想用where条件选择从db_1、db_2、db_3到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

我的数据库表:

db_1
db_2
db_3
我的内部表格:

it_comb
它有一个结构,包含来自db_1、db_2、db_3的一些字段

所有数据库表都有不同的结构

我想用where条件选择从db_1、db_2、db_3到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写这个?因此,它由来自db_1、db_2和db_3的数据填充

另一个问题是,每次我在其中选择某个内容时,我以前的数据都会被覆盖


对于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).
追加不会覆盖内部表中的上一条记录

警告:如果内部表是标准类型,请使用追加,否则将得到转储。
同样

在没有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.
这将在一个步骤中定义和填充内部表,而不需要单独的数据语句

请注意,在与*的联接中,您将获得一个具有基于表名的子结构的内部表-由于该结构隐含在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.

希望这有帮助

@Lucky如果您的内部表已经保存了数据,那么显然它将覆盖数据。最好创建另一个具有相同结构的内部表,并在select语句之前移动该记录。将it_梳的行追加到it_梳1。您可以通过选择使用追加。这不会删除内部表中的数据,但会添加新选择的行:选择。。。添加到附加表中。。。或添加到表的相应字段中。。。显然,仅适用于类型标准tables@JozsefSzikszai感谢您提供的信息,我之前没有在SELECT中使用附加功能。