在 HANA 上探索 ABAP [2]: CDS Views with join

2021-11-07 21:46发布


          点击此处--->   EasySAP.com 群内免费提供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 视图启用缓冲。

  • 在嵌套连接中,应显式使用括号以使代码可读

赞赏支持