Abap 仅使用表声明的内部联接
我需要在mara和makt表上使用内部联接编写一个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.
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.
无进入
条款
nointo
子句类似于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.
无进入
条款
nointo
子句类似于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