0

次の 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

ただし、提案は

  1. MAX(値)の選択
  2. 最初の CDS ビューへの内部結合を使用するシナリオ

私の場合はうまくいきません。

  1. tf.bis (および tf.ab) は、結合 (新しいビュー) の rhs を正しい時間枠に制限するために、新しいビューの選択リストに含まれている必要があります。
  2. 残念ながら、同じ tf.tarifart を持つ複数の (重複しない) サブ時間フレーム ([tf.ab, tf.bis] に含まれる) が存在する可能性があります。これらは一緒にグループ化できないため、rhs に複数の行が作成されます。

元のクエリには問題はありません (結合なし -> デカルト積なし)。

次のフィドル(実際の例)が少し解決することを願っています:http://sqlfiddle.com/#!9/8d1f48/3

これらの制約を考えると、同等の結合は実際には不可能に思えます。提案または確認さえありますか?

4

1 に答える 1