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

时间:2018-06-08 06:22:44

标签: select abap

我的数据库表:

db_1
db_2
db_3

我的内部表:

it_comb

it_comb的结构包含db_1,db_2,db_3。

中的一些字段

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

我想从db_1,db_2,db_3到it_comb的正确字段中选择where 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的数据。

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

ABAP-Beginner将会感谢代码示例。

3 个答案:

答案 0 :(得分:4)

您可以使用内部联接 -

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中的上一条记录。

警告:如果内部表格为APPENDING,请使用TYPE STANDARD,否则您将获得转储。 另外check the SELECT - JOIN documentaion

答案 1 :(得分:0)

没有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.

答案 2 :(得分:0)

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

DagRun

这将在一步中定义和填充您的内部表,而无需单独的数据"声明。

请注意,在带*的连接中,您将获得一个内部表,其中包含基于表名的子结构 - 由于结构隐含在select的字段列表中,您还可以执行类似的操作以获取更多信息高效的数据库查询(因此它不需要返回所有字段),这也消除了子结构:

running

希望这有帮助!