内连接仅使用TABLES声明

时间:2018-07-04 18:56:51

标签: sap abap

我需要在表mara和makt上使用内部联接编写ABAP程序。我了解使用这样的数据声明的想法:

data: imatnr type mara-matnr,
      ematnr type makt-matnr.

select mara~matnr makt~matnr into (imatnr, ematnr) from mara left join makt on mara~matnr = makt~matnr.
  write: / imatnr, ematnr.
endselect.

在考试中,我必须编写一个没有内部表,字段符号 JUST TABLES DEKLARATIONS 的ABAP程序。 我做了几次尝试,但是没有找到答案。 我尝试过这样的事情:

tables: mara, makt.


select * from mara inner join makt on mara~matnr = makt~matnr.
  write: / mara-matnr, makt-matnr.
endselect.

控制台说,如果要在select * from语句中使用JOIN,则必须使用INTO。

所以我的问题是:是否可以仅使用TABLES建立JOIN还是仍然需要DATA:

3 个答案:

答案 0 :(得分:3)

  

所以我的问题是:

     

是否可以仅使用表建立连接:mara,makt。

不。 表格是工作区,又称平面结构,关键字是 flat 。您不能仅使用TABLES选择多行,也不能加入TABLES工作区。

顺便说一句,表help guidelines清楚地说

  

除经典dynpros外,没有工作台区域

所以忘记这些过时的东西。

如果您的考试和学习课程只要求您使用TABLES,则可以避开那些课程和那些学校。请逃跑。

P.S。满足嵌套需求的唯一方法是嵌套SELECT:

TABLES: mara, makt.

SELECT * FROM mara
  INTO mara.
  WRITE: / `MARA selected: `, mara-matnr.
  SELECT *
    INTO makt
    FROM makt WHERE matnr = mara-matnr.
    WRITE: / `MAKT selected: `, makt-matnr.
  ENDSELECT.
ENDSELECT.

但这让人恶心。

答案 1 :(得分:2)

可能对您有所帮助的SQL选择查询之间几乎没有区别。

通用选择语句(没有任何特定类型)如下所示。

Select * from [table] where [field] = [value]

根据是否以及如何指定into子句,使用特定类型的选择。


into table

into table选择一个或多个记录进入内部表。仅当选择子句(字段列表)与内部表的结构相同时才能使用。

   data: lt_ekko type table of ekko,
         ls_ekko type table of ekko,
   select * from ekko into table @lt_ekko.
   loop at lt_ekko into ls_ekko.
      write: / ls_ekko-ebeln.
   endloop.

into

into表示您正在选择一个变量(如果您选择1列)或一个结构(如果您选择了1个以上)。这很重要,因为结构只能且变量只能存储1个值或行,这意味着您必须指定要选择的single或使用select / {{ 1}}语句来执行循环选择。

endselect

OR

  data: ls_ekko type ekko.
  select single * from ekko into @ls_ekko where ebeln = [some number]
  write: / ls_ekko-ebeln.

select * from ekko into @ls_ekko where ebeln = [some number]. write: / ls_ekko-ebeln. "will print one for each row endselect.

into corresponding fields of (table)(和into corresponding fields of)以与into corresponding fields of tableinto相同的方式选择记录。区别在于您的结构或内部表不必与所选字段列表相同。所选字段将以相同的名称存储到您的表/结构字段中。

into internal table

data: ls_ekko type ekko. select single ebeln, bukrs from ekko into @ls_ekko where ebeln = [some number]. write: / ls_ekko-ebeln. 子句

没有into子句类似于into [结构],因为它只能选择1条记录。这意味着您必须指定选择into记录。 注意:要在其中选择的表必须在程序中声明才能使用这种类型的选择。

single

由于您没有使用 select single * from ekko where ebeln = [some number]. write: / ekko-ebeln. 子句,因此使用的是最后一种类型,这意味着您必须使用into

答案 2 :(得分:-1)

请尽量不要使用<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <p> This is some text that #has #hash #tags </p>。从数据库表中仅获取必要的字段名称。

下面是如何联接两个表的示例。

Select *