我想知道如何在不必寫出(或使數據庫進程)這個查詢的主要部分兩次的情況下執行此操作。使用相同的數據更高效地創建Oracle UNION查詢
我的情況是我在查詢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'
),並從此查詢中提取數據,並使用UNION
將第二個表格附加到主查詢中。
我面臨的主要挑戰是Field1
& Field2
的定義在2個查詢之間發生了變化,所以我無法弄清楚如何進行簡單的連接。但是我相信必須有一種方法可以實現這一點,而不必讓數據庫查詢兩次相同的數據。
有關如何使此查詢更高效的任何想法?
謝謝!
基於註釋,解釋多一點關於這個查詢 - 我所試圖做的就是我的整個數據unvierse查詢上半年,然後在第二個上多餘的行追加查詢的記錄的一半,其中a.FieldZ = 'XXXX'
其中計算是Field1
和Field2
請問您可以發表表格定義嗎? – twoleggedhorse 2013-02-21 14:52:05
你能用這個查詢解釋你在現實世界中想要做什麼嗎? – 2013-02-21 14:53:13
首先,你的僞查詢是錯誤的(選擇field6,而你只在子查詢中選擇5)。接下來,如果我理解正確,您希望FieldA具有不同的值,具體取決於FieldZ是否爲XXX。有更好的解決方案可以做到這一點(例如'DECODE') – Najzero 2013-02-21 14:54:26