このクエリの主要部分を2回書き出す(またはDBプロセスを作成する)ことなく、どうすればこれを実行できるのでしょうか。
私のシナリオは、Oracleエンタープライズデータベースにクエリを実行している場合です(DBAによって制限されているため、一部のソリューションが機能しない場合がありますが、どこに行けばよいかわからない限り、どの程度制限されているかわかりません。これでまだ)。
現在、私のクエリは次のようになります。
SELECT
a.Field1,
a.Field2,
b.Field3,
b.Field4,
c.Field5
FROM
a,
b,
c,
WHERE
a.FieldX = b.FieldX
AND
b.FieldY = c.FieldY
UNION
(
SELECT
d.Field6 as Field1,
d.Field7 + d.Field8 as Field2,
MainQuery.Field3,
MainQuery.Field4,
MainQuery.Field5
FROM
(
SELECT
a.Field1,
a.Field2,
b.Field3,
b.Field4,
c.Field5
FROM
a,
b,
c,
WHERE
a.FieldX = b.FieldX
AND
b.FieldY = c.FieldY
AND
a.FieldZ = 'XXXX'
) MainQuery,
d
WHERE
MainQuery.Field1 = d.Field6
)
簡単に言えば、結果の大部分を返すメインクエリ(最初の部分)があり、追加の制限(a.FieldZ = 'XXXX'
)を使用してメインクエリを繰り返し、このクエリと2番目のテーブルからデータを取得して追加しますを使用したメインクエリUNION
。
私が直面している主な課題は、2つのクエリの定義とField1
変更Field2
であるため、単純な結合を行う方法がわかりません。しかし、DBに同じデータを2回クエリさせることなく、これを実現する方法が必要だと確信しています。
このクエリをより効率的にする方法について何か考えはありますか?
ありがとう!!
コメントに基づいて、このクエリについてもう少し説明します-私がやろうとしているのは、クエリの前半でデータの全体を取得し、クエリの後半でレコードの追加の行を追加することですとa.FieldZ = 'XXXX'
の計算がわずかに異なるField1
場合Field2