首页 文章

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

提问于
浏览
1

我的数据库表:

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条件 .

我想做这样的事情:(这不起作用)

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

    你可以使用内连接 -

    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 否则您将获得转储 . 还check the SELECT - JOIN documentaion

  • 4

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

    在较新的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.
    

    希望这可以帮助!

相关问题