SQL - 查询自连接而不执行两次
SQL - Query Self Join without executing it twice
我有一个 SQL 查询,由于它需要大量数据,因此需要很长时间才能执行(例如 30 分钟!)。
但是,我需要对这个结果做一些更多的事情——对这个查询进行自连接。
我无法在此数据库上创建临时 table。
我想要的是一种无需执行此查询两次即可执行此自连接的方法。
有没有一种方法可以编写主查询(可能使用 '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 此处查询”将执行两次,这是我的问题。
您可以将查询简化为:
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;
我有一个 SQL 查询,由于它需要大量数据,因此需要很长时间才能执行(例如 30 分钟!)。
但是,我需要对这个结果做一些更多的事情——对这个查询进行自连接。
我无法在此数据库上创建临时 table。
我想要的是一种无需执行此查询两次即可执行此自连接的方法。
有没有一种方法可以编写主查询(可能使用 '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 此处查询”将执行两次,这是我的问题。
您可以将查询简化为:
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;