次の 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.tarifart を持つ複数の (重複しない) サブ時間フレーム ([tf.ab, tf.bis] に含まれる) が存在する可能性があります。これらは一緒にグループ化できないため、rhs に複数の行が作成されます。
元のクエリには問題はありません (結合なし -> デカルト積なし)。
次のフィドル(実際の例)が少し解決することを願っています:http://sqlfiddle.com/#!9/8d1f48/3
これらの制約を考えると、同等の結合は実際には不可能に思えます。提案または確認さえありますか?