我想用等效的联接替换以下 ABAP OpenSQL 片段(在更大语句的 where 子句中)。
... AND tf~tarifart = ( SELECT MAX( tf2~tarifart ) FROM ertfnd AS tf2 WHERE tf2~tariftyp = e1~tariftyp AND tf2~bis >= e1~bis AND tf2~ab <= e1~ab ) ...
我的动机:查询迁移到 ABAP CDS 视图(基本上是纯 SQL,相比之下表达能力有所降低)。唉,不支持相关子查询和 EXISTS 语句。
我用谷歌搜索了一下,在这里找到了一个可能的解决方案(最后一篇文章)https://archive.sap.com/discussions/thread/3824523
然而,该提案
- 选择 MAX(值)
- 您的方案使用内部连接到第一个 CDS 视图
在我的情况下不起作用。
- tf.bis(和 tf.ab)需要在新视图的选择列表中,以将连接(新视图)的 rhs 限制在正确的时间范围内。
- 唉,可能有多个(非重叠)子时间框架(包含在 [tf.ab, tf.bis] 中)具有相同的 tf.tarifart。由于这些不能组合在一起,这会导致 rhs 上出现多行。
原始查询对此没有问题(没有连接 -> 没有笛卡尔积)。
我希望下面的小提琴(工作示例)能澄清一点:http ://sqlfiddle.com/#!9/8d1f48/3
鉴于这些限制,在我看来,等效连接确实是不可能的。建议甚至确认?