我需要在表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
(选择记录的方式与into
和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
子句类似于into
[结构],因为它只能选择 1 条记录。这意味着您必须指定选择single
记录。 注: 必须从中选择的表在程序中声明才能使用此类型的选择。
select single * from ekko where ebeln = [some number].
write: / ekko-ebeln.
由于您没有使用into
子句,因此您使用的是最后一个类型,这意味着您必须使用select single