点击此处---> 群内免费提供SAP练习系统(在群公告中)
加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)
在这篇文章中,您将学习创建包含连接的 CDS 视图。您还将了解右外连接和交叉连接,它们是最近添加到 ABAP 中的连接。
这篇文章中涵盖的连接是 –
Inner Joins
Left Outer Join
Right Outer Join
Cross Join
在 HANA 上探索 ABAP [1] :CDS 视图简介 中介绍了创建 CDS 视图的步骤。
带有内连接的 CDS 视图
内联接返回满足 ON 条件的条目。当两个表中都存在对应的记录时返回记录,如果表位置切换,则返回结果相同。
要创建带有连接的 CDS 视图,可以使用以下模板。
该模板使用左外连接,您需要将其更改为内连接。完成代码如下。
@AbapCatalog.sqlViewName: 'ZJP_CDS_JOIN' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS View with Inner Join' define view zjp_cds_inner_join as select from spfli inner join scarr on scarr.carrid = spfli.carrid { key spfli.carrid as id, key scarr.carrname as carrier, key spfli.connid as flight, spfli.cityfrom as departure, spfli.cityto as destination }
输出
带有左外连接的 CDS 视图
即使右表中没有匹配的条目,左外连接也会返回左表中的所有条目。如果找到匹配的条目,将填充右表中的字段,否则这些字段将保留为空白。
例子
@AbapCatalog.sqlViewName: 'ZJP_CDS_JOIN_L' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS View with Left Outer Join' define view zjp_cds_left_join as select from scarr left outer join spfli on scarr.carrid = spfli.carrid { key scarr.carrid as id, key scarr.carrname as carrier, key spfli.connid as flight, spfli.cityfrom as departure, spfli.cityto as destination }
输出
带有右外连接的 CDS 视图
即使左表中没有匹配的条目,右外连接也会返回右表中的所有条目。如果找到匹配的条目,将填充左表中的字段,否则这些字段将保留为空白。
完成的 CDS 视图示例如下。
@AbapCatalog.sqlViewName: 'ZJP_CDS_JOIN_R' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'CDS View with Righ Outer Join' define view zjp_cds_right_join as select from sflight right outer join spfli on sflight.carrid = spfli.carrid and sflight.connid = spfli.connid { key sflight.carrid as id, key sflight.connid as flight, key sflight.fldate as departuredate, spfli.cityfrom as departure, spfli.cityto as destination } where spfli.carrid = 'DL'
请注意,WHERE 条件适用于使用连接创建的结果集。
输出如下所示。(您可能会根据系统中的条目获得不同的输出)
带交叉连接的 CDS 视图
交叉联接返回联接中表中行的笛卡尔积,即,它将生成将左表中的每一行与右表中的每一行组合在一起的行。
示例 - 想象一个具有单个字段颜色的表和另一个具有单个字段形状的表。如果我们想输出所有可能的颜色和形状组合——我们可以使用交叉连接。
@AbapCatalog.sqlViewName: 'ZJP_CDS_JOIN_C' @AccessControl.authorizationCheck: #NOT_REQUIRED @EndUserText.label: 'Cross Join' define view zjp_cds_cross_join as select from zjp_color cross join zjp_shape { key zjp_color.color as Color, key zjp_shape.shape as Shape }
输出
在我结束这篇文章之前,关于连接的几个要点
不应为具有外部联接的 CDS 视图启用缓冲。
在嵌套连接中,应显式使用括号以使代码可读