如果我们要在ABAP SQL中访问CDS视图中的association(关联),那么就需要使用到Path Expression,即路径表达式,SAP希望我们使用关联而不是连接,因为关联是按需加入,只有使用路径表达式访问关联目标中的字段时,才会创建实际的join连接,下面通过几个简单的例子来说明路径表达式的使用方法。
1 在路径表达式中指定基数
当CDS view的关联指定基数[min..max]中的max为 * 时,在通过ABAP路径表达式访问时,需要指定基数,否则会有语法警告。
ABAP中的基数可以指定为[ (*) ]、[ (1) ]、[ (2) ],等同于to *、to 1、to 2,且会覆盖CDS view中指定的基数。
2 在路径表达式中指定连接类型 [ JOIN / LEFT OUTER JOIN ]
当路径表达式中指定了基数时,系统会默认连接类型为LEFT OUTER JOIN,以下SQL的结果可以验证这个默认规则,可以看到SPFLI表中并没有起飞机场为RTM的条目,但依然有结果输出,只是对应字段信息为空。
可以通过指定连接类型来达到内关联的效果:
3 在路径表达式中使用参数Parameters
4 在路径表达式中使用过滤条件
4.1. 在SELECT中的路径表达式上使用过滤条件
可以看到只有ID为“JFK”的条目的NAME字段有值,其他条目NAME字段的值则为空。
4.2. 在FROM中的路径表达式上使用过滤条件
需要注意的是,当在FROM中的路径表达式中使用了过滤条件时,只能查询该关联目标中的字段,比如上面SQL中对_SAIRPORT的关联使用了过滤条件,则只能查询_SAIRPORT关联中的字段,如果查询SPFLI中的字段则会报错,无法通过语法检查:
同时CDS view中也可以使用路径表达式以及指定过滤条件和连接类型,如下所示:
以上。