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.
希望对您有所帮助!
我的数据库 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.
希望对您有所帮助!