仅使用 TABLES 声明进行内部连接



我需要在表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程序,字段符号只是表格DEKLARATIONS。 我做了几次尝试,但没有找到答案。 我尝试了这样的事情:

tables: mara, makt.

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

控制台说,如果我想在选择 * from 语句中使用 JOIN,我必须使用 INTO。

所以我的问题是:是否可以仅使用TABLES构建 JOIN,还是无论如何都需要DATA:

所以我

的问题是:

是否可以仅使用表构建 JOIN:mara,makt。

不。 桌子是一个工作区又名平面结构,关键字是平面。不能仅使用"表"选择多行,也不能联接"表"工作区。

顺便说一句,表格帮助指南清楚地说

除了经典的dynnpros外,没有工作台工作区

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

如果您的考试和学习课程要求您只使用TABLES那么请逃离这些课程和学校。求求你,快跑吧。

附言满足讨厌要求的唯一方法是嵌套 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.

但这感觉很恶心。

SQL 选择查询之间的一些区别可能会对您有所帮助。

泛型 select 语句(没有任何特定类型(如下所示。

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

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


into table

into table选择一条或多条记录到内部表中。 仅当 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

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

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 table(选择记录的方式与intointo 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子句类似于into[结构],因为它只能选择 1 条记录。这意味着您必须指定选择single记录。 注: 必须从中选择的表在程序中声明才能使用此类型的选择。

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

由于您没有使用into子句,因此您使用的是最后一个类型,这意味着您必须使用select single

相关内容

  • 没有找到相关文章

最新更新