ABAP SQL | Join中的客户处理

2020-08-20 13:44发布

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

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


大家好,

在阅读HA400培训课程脚本(课程版本12)时,我遇到以下段落:

起初我以为:哇,从来没有听说过,显然我们所有的加入都是错误的! 但是由于该密码描述了7.4版本的更改,因此我只是在7.0系统中进行了尝试。 我创建了两个表-head和item,然后填充了两个表,但是第一个表位于一个客户端中,第二个表位于另一个客户端中。 无论在哪个客户端中,以及内部还是外部连接,我都无法从其他客户端获取任何数据。

那么,这种改进意味着什么?在<7.4系统中,将客户字段添加到有条件的情况是否合理?

我在文档中找不到任何线索,因此,如果你们的一位专家可以对这一神秘的改进有所了解,我将非常感激。

最好的问候

Michał

client-handling-in-joins.jpg (55.7 kB)

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

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


大家好,

在阅读HA400培训课程脚本(课程版本12)时,我遇到以下段落:

起初我以为:哇,从来没有听说过,显然我们所有的加入都是错误的! 但是由于该密码描述了7.4版本的更改,因此我只是在7.0系统中进行了尝试。 我创建了两个表-head和item,然后填充了两个表,但是第一个表位于一个客户端中,第二个表位于另一个客户端中。 无论在哪个客户端中,以及内部还是外部连接,我都无法从其他客户端获取任何数据。

那么,这种改进意味着什么?在<7.4系统中,将客户字段添加到有条件的情况是否合理?

我在文档中找不到任何线索,因此,如果你们的一位专家可以对这一神秘的改进有所了解,我将非常感激。

最好的问候

Michał

client-handling-in-joins.jpg (55.7 kB)
付费偷看设置
发送
5条回答
DafaDDDa
1楼 · 2020-08-20 14:02.采纳回答

因此,如果我们有此Open SQL代码,则表T1和T2取决于客户端:

 SELECT *
 从t1内部联接t2
 开启t1〜keyfield = t2〜keyfield
 在t1〜attr =''
 

在版本<7.40中,也许转换为数据库SELECT的Open SQL SELECT仅包括客户端选择(客户端100的示例):

 SELECT *
 从t1内部联接t2
 开启t1.keyfield = t2.keyfield
 其中t1.client ='100'和t2.client ='100'且" <======仅在这里
       t1〜attr =''

在版本> = 7.40中,已添加客户端之间的联接:

 SELECT *
 从t1内部联接t2
 开启t1.client = t2.client AND" <======这里(7.40中的新功能)
    t1.keyfield = t2.keyfield
 在t1.client ='100'和t2.client ='100'且" <======此处
       t1〜attr =''
 

两个查询的返回行都是相同的,但是如果转换为数据库的SQL的连接显式包含t1.client = t2.client,则数据库有时可能会更好地优化查询。 咨询说明 621640-通过JOIN和自动客户端处理进行选择的解释

  • "当对两个或多个表使用SELECT语句和JOIN语句时,数据库访问速度比预期的慢。"
  • " 数据库优化程序,可以将" TAB1〜MANDT等于TAB2〜MANDT"格式的比较添加到ON条件。"

因此,在此注释中,SAP最终提出了 测试Open SQL(7.40之前的版本)中的此解决方案是否提高了性能:

 SELECT *
 从t1内部联接t2
 在t1〜client = t2〜client和" <======上可以添加它(7.40之后不再需要)
    t1〜关键字段= t2〜关键字段
 在t1〜attr =''
 
绿领巾童鞋
2楼-- · 2020-08-20 13:58

对不起,我有3条单独的评论-我曾两次尝试将所有评论都放入一条评论中,但由于某种原因无法提交。

哎,真难
3楼-- · 2020-08-20 14:10

侵犯版权,但我怀疑SAP会为此寻求保护。 大多数内容在ABAP文档中。 无论如何,您都可以在几天内删除这些注释。

是否有可能以前通过仅在WHERE中为所有表添加客户端选择(a〜client ='100'和b 〜client ='100'),并且现在添加了等式(在a〜client = b〜client上)。 结果没有改变,但也许数据库可以更好地优化?

南山jay
4楼-- · 2020-08-20 14:12

也许此注释可以解释过去的工作方式:note 621640 通过JOIN和自动客户端处理进行选择

nice_wp
5楼-- · 2020-08-20 14:14

谢谢桑德拉! 其实我也在考虑。 但我找不到该笔记,谢谢。


现在,我尝试将MANDT字段添加到ON条件,因为我们开发的目标系统范围是7.0到最新的系统。 但是从7.40开始,在使用MANDT字段的情况下,将在ON条件下发出错误通知-同时(扩展)语法检查和Code Inspector的默认变体。

动态SQL是没有选择的,所以我认为我们最终将忽略这个问题-只有拥有旧系统的客户才可能受到影响。

一周热门 更多>