我想知道如何在不必两次写出(或使数据库进程)成为该查询的主要部分的情况下做到这一点。
我的场景是我正在查询一个 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
变化,所以我不知道如何做一个简单的连接。但我确信必须有一种方法可以实现这一点,而不必让数据库查询相同的数据两次。
关于如何使这个查询更有效的任何想法?
谢谢!!
根据评论,更多地解释这个查询 - 我要做的是在查询的前半部分获取我的全部数据,然后在查询的后半部分附加额外的行以获取记录其中a.FieldZ = 'XXXX'
计算与和的略有不同的Field1
地方Field2