Abap 仅使用表声明的内部联接

Abap 仅使用表声明的内部联接,abap,opensql,Abap,Opensql,我需要在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.

我需要在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.
在我的考试中,我必须编写一个没有内部表格、字段符号的ABAP程序,而只有表格数据。 我做了几次尝试,但没有找到答案。 我试过这样的方法:

tables: mara, makt.


select * from mara inner join makt on mara~matnr = makt~matnr.
  write: / mara-matnr, makt-matnr.
endselect.
控制台说,如果我想在select*from语句中使用联接,就必须使用INTO


所以我的问题是:是否可以只使用
表构建联接,或者我是否需要
数据:

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

Select * from [table] where [field] = [value]
根据是否以及如何在
子句中指定
,将使用某种类型的select


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

   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
表示选择变量(如果选择1列)或结构(如果选择1列以上)。这一点很重要,因为结构只能存储一个值或行,而变量只能存储一个值或行,这意味着您必须指定选择一个
单个
或使用
select
/
endselect
语句执行循环选择

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


进入(表)的相应字段中
进入
的相应字段(和
进入表的相应字段
)选择记录的方式与
进入
进入内部表
的方式相同。不同之处在于,您的结构或内部表不必与所选字段列表相同。所选字段将以相同的名称存储到表/结构字段中

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

进入
条款
no
into
子句
类似于
into
[structure],因为它只能选择一条记录。这意味着您必须指定选择一条
记录。
注意:要使用此类型的select,必须在程序中声明要从中选择的表

  select single * from ekko where ebeln = [some number].
  write: / ekko-ebeln.


因为您没有使用
into
子句,所以您使用的是最后一种类型,这意味着您必须在SQL选择查询之间使用
select single

一些可能对您有所帮助的区别

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

Select * from [table] where [field] = [value]
根据是否以及如何在
子句中指定
,将使用某种类型的select


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

   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
表示选择变量(如果选择1列)或结构(如果选择1列以上)。这一点很重要,因为结构只能存储一个值或行,而变量只能存储一个值或行,这意味着您必须指定选择一个
单个
或使用
select
/
endselect
语句执行循环选择

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


进入(表)的相应字段中
进入
的相应字段(和
进入表的相应字段
)选择记录的方式与
进入
进入内部表
的方式相同。不同之处在于,您的结构或内部表不必与所选字段列表相同。所选字段将以相同的名称存储到表/结构字段中

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

进入
条款
no
into
子句
类似于
into
[structure],因为它只能选择一条记录。这意味着您必须指定选择一条
记录。
注意:要使用此类型的select,必须在程序中声明要从中选择的表

  select single * from ekko where ebeln = [some number].
  write: / ekko-ebeln.

因为您没有在
子句中使用
,所以您使用的是最后一种类型,这意味着您必须使用
选择单个

所以我的问题是:

是否可以仅使用以下表构建联接:mara、makt

没有。 表是一个工作区,也称为平面结构,关键字为flat。不能仅使用表选择多行,也不能连接表工作区

顺便说一句,表格清楚地表明

除经典dynpros外,无工作台区域

所以,忘掉这些过时的东西吧

如果你的考试和学习课程要求你只使用
表格
,那么就离开那些课程和学校。请走开

另外,满足您的苛刻要求的唯一方法是:

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.
但那感觉很恶心

所以我的问题是:

是否可以仅使用以下表构建联接:mara、makt

没有。 表是一个工作区,也称为平面结构,关键字为flat。不能仅使用表选择多行,也不能连接表工作区

顺便说一句,表格清楚地表明

除经典dynpros外,无工作台区域

所以,忘掉这些过时的东西吧

如果你的考试和学习课程要求你只使用
表格
,那么就离开那些课程和学校。请走开

另外,满足您的苛刻要求的唯一方法是:

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.

但是那感觉很恶心。

我喜欢这个答案,尽管我相信原来的问题(考试的)被误解了。你能在回答中增加使用表类型声明的机会吗?没有这种机会。o