在数据库表和内部表之间联接?

2020-09-03 16:29发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在优化代码。 在一个地方,我已经将相当大的DD表DD03L的子集选择到了一个较小的内部表中,供循环使用。 再进一步,我需要在DD表DD05P中查询有关关系的数据,然后再次我首先创建一个较小的内部表供循环使用-这第二个表我必须与DD03L联接,因为我需要另一个字段。

我的问题是:由于我已经有一个内部表DD03L_int,该内部表比DD03L小得多,我不能以此与数据库表DD05P联接,从而节省性能吗? 还是有其他选择,例如使用FAE之类的东西?

非常感谢!

最诚挚的问候,

Sapperdapper

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


嗨,

我正在优化代码。 在一个地方,我已经将相当大的DD表DD03L的子集选择到了一个较小的内部表中,供循环使用。 再进一步,我需要在DD表DD05P中查询有关关系的数据,然后再次我首先创建一个较小的内部表供循环使用-这第二个表我必须与DD03L联接,因为我需要另一个字段。

我的问题是:由于我已经有一个内部表DD03L_int,该内部表比DD03L小得多,我不能以此与数据库表DD05P联接,从而节省性能吗? 还是有其他选择,例如使用FAE之类的东西?

非常感谢!

最诚挚的问候,

Sapperdapper

付费偷看设置
发送
6条回答
Cikesha
1楼 · 2020-09-03 17:17.采纳回答

你好弗里德里希,

不能在数据库表和内部表之间使用JOIN; 该关键字仅用于数据库查询。 为何不使用JOIN一次读取两个表,而不是将每个表分别读取到内部表中? 听起来您无论如何都在联接表。

 SELECT ...从DD03L〜field = DD03L〜field上的DD03L JOIN DD05P ... 

如果这种方法不能满足您的要求,请提供更多详细信息,说明您正在从每个表/视图读取哪些字段以及尝试创建的结果集。

干杯

艾米

蓋茨
3楼-- · 2020-09-03 17:15

亲爱的弗里德里希 ,

使用FOR ALL ENTRIES的SELECT语句将很方便,在这种情况下,您需要将与使用FOR ALL ENTRIES比较条目的表和要从中选择数据的表相等的字段等同起来。

EX-

选择*

EKPO面包

对于表ITAB中的所有条目

WHERE EBELN = ITAB-EBEL。

致谢

Dinesh????

艾米:感谢您的支持

路亽曱_Ryan
4楼-- · 2020-09-03 16:59

大家好,

非常感谢所有帮助! 使用此技巧,我能够将查询DD03L的数据量减少大约90%-现在,我只查询我提供给用户的表的字段,这是我所需要的-从而导致整体运行时间 (目前)减少了75%;-)

再次感谢!

最诚挚的问候,

Sapperdapper

hongfeng1314
5楼-- · 2020-09-03 17:14

亲爱的弗里德里希,

最好从一个表中将所有相关数据选择到ITAB1中,然后基于"将ITAB1中的所有条目转换成ITAB2"从另一个表中选择数据。

致谢

Dinesh????

Doze时光
6楼-- · 2020-09-03 16:53

嗨,Manu,

好吧,加入DD05P是困难的,因为SE11不会告诉我该表的关键字段-我假设它是TABNAME和FIELDNAME,但是在某些情况下,我在FIELDNAME中只有一个字段-在两个字段中相同 记录-但是FORKEY中有两个不同的记录,这是正确的。 因此,我不得不参加两次尝试,但是后来我遇到了其他一些困难,那就是当我意识到这样做对我的整体表现没有任何好处时。

结合这两个问题不是问题,最终我会解决的。 问题正在过滤-我的程序应该是通用的,因此我不能排除太多。 DD05P非常小-我可以将其记录到少于10万条记录中-但其中一个仅处理表。 包含所有字段的DD03L自然要大得多。

将所有部件放在一起会有所不同:首先,我必须对DD03L进行一次SELECT,这给了我很多记录,但是稍后当我有一个(很小的)内部表时 用用户选择的表和字段作为输入,我可以用它来相应地从DD03L进行SELECT并只得到一小部分。 与DD05P相同。

最诚挚的问候,

Sapperdapper

一周热门 更多>