仅使用 TABLES 声明进行内部连接
Inner join only with TABLES declaration
我需要编写一个在表 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 程序 JUST TABLES DEKLARATIONS。
我做了几次尝试,但没有找到答案。
我试过这样的事情:
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:
?
SQLselect离子查询之间的一些区别可能对您有帮助。
一个通用的 select 语句(没有任何特定类型)看起来像这样。
Select * from [table] where [field] = [value]
根据您是否以及如何指定 into
子句,使用某种类型的 select。
into table
into table
select 一个或多个记录 进入内部 table。只能在您的 select 子句(字段列表)与内部 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
表示您正在 select 进入变量(如果您 select 1 列)或结构(如果您 select 超过1).这很重要,因为结构只能和变量只能存储 1 个值或行,这意味着您必须 指定您正在 selecting single
行 或使用select
/endselect
语句执行循环 select.
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
)selects 的记录方式与into
和into internal table
相同。区别在于您的结构或内部 table 不必与您的 selected 字段列表相同。所选字段将存储到您的 table/structure 同名字段中。
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
[结构],因为它只能select1条记录。这意味着您必须指定 select 一条 single
记录。
注意:您 select 来自的表必须在程序中声明才能使用这种类型的 select。
select single * from ekko where ebeln = [some number].
write: / ekko-ebeln.
由于您没有使用 into
子句,您使用的是最后一种类型,这意味着您必须使用 select single
So my question is:
Is it possible to build an JOIN only with tables: mara, makt.
没有。
Table 是工作区又名平面结构,关键字是 flat。您不能 select 仅使用 TABLES 多行并且不能加入 TABLES 工作区。
顺便说一句,表格 help guidelines 清楚地说
No table work areas except for classic 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.
但这感觉很恶心。
我需要编写一个在表 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 程序 JUST TABLES DEKLARATIONS。 我做了几次尝试,但没有找到答案。 我试过这样的事情:
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:
?
SQLselect离子查询之间的一些区别可能对您有帮助。
一个通用的 select 语句(没有任何特定类型)看起来像这样。
Select * from [table] where [field] = [value]
根据您是否以及如何指定 into
子句,使用某种类型的 select。
into table
into table
select 一个或多个记录 进入内部 table。只能在您的 select 子句(字段列表)与内部 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
表示您正在 select 进入变量(如果您 select 1 列)或结构(如果您 select 超过1).这很重要,因为结构只能和变量只能存储 1 个值或行,这意味着您必须 指定您正在 selecting single
行 或使用select
/endselect
语句执行循环 select.
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
)selects 的记录方式与into
和into internal table
相同。区别在于您的结构或内部 table 不必与您的 selected 字段列表相同。所选字段将存储到您的 table/structure 同名字段中。
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
[结构],因为它只能select1条记录。这意味着您必须指定 select 一条 single
记录。
注意:您 select 来自的表必须在程序中声明才能使用这种类型的 select。
select single * from ekko where ebeln = [some number].
write: / ekko-ebeln.
由于您没有使用 into
子句,您使用的是最后一种类型,这意味着您必须使用 select single
So my question is:
Is it possible to build an JOIN only with tables: mara, makt.
没有。 Table 是工作区又名平面结构,关键字是 flat。您不能 select 仅使用 TABLES 多行并且不能加入 TABLES 工作区。
顺便说一句,表格 help guidelines 清楚地说
No table work areas except for classic 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.
但这感觉很恶心。