我有一个SQL查询,由于需要大量数据,因此需要花费很长时间才能执行(例如30分钟!)。
但是,我需要在此结果上做更多关于自我加入此查询的事情。
我无法在此数据库上创建临时表。
我想要的是一种在不执行此查询两次的情况下执行此自连接的方法。
有没有办法编写主查询(可能带有'WITH'语法)以允许它?
编辑: 以下是可行的示例:
With
MyQueryAlias1 AS
(30 minutes sql query here)
MyQueryAlias2 AS
(30 minutes sql query here)
SELECT
MyQueryAlias1.field1
FROM
MyQueryAlias1
JOIN MyQueryAlias2
ON MyQueryAlias1.field2 = MyQueryAlias2.field3
这只是一个例子,但它显示“30分钟sql查询在这里”将被执行两次,这是我的问题。
答案 0 :(得分:2)
您可以将查询简化为:
WITH MyQueryAlias1 AS (30 minutes sql query here)
SELECT q1.field1
FROM MyQueryAlias1 q1
JOIN MyQueryAlias1 q2
ON q1.field2 = q2.field3
将摆脱第二个子查询因子条款。
这可能也有效:
WITH MyQueryAlias1 AS (30 minutes sql query here)
SELECT field1
FROM MyQueryAlias1
WHERE LEVEL = 1
AND ( field2 = field3 OR CONNECT_BY_ISLEAF = 0 )
CONNECT BY NOCYCLE
PRIOR field2 = field3
AND LEVEL = 2;