2016-03-07 3 views
-1

У меня есть SQL-запрос, который требует много времени для выполнения (например, 30 минут!) Из-за огромных данных, которые он принимает.SQL - Query Self Join без его выполнения дважды

Тем не менее, мне нужно сделать пару вещей, более того, для этого результата присоединитесь к этому запросу.

Я не могу создать временную таблицу в этой базе данных.

Что я хочу - это способ сделать это самостоятельно, не выполняя этот запрос дважды.

Есть ли способ написать основной запрос (возможно, с синтаксисом «WITH»), чтобы это разрешить?

Edit: Вот пример того, что будет работать:

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 

Это просто пример, но он показывает, что «запрос SQL 30 минут здесь» будет выполняться дважды, что моя проблема.

+3

разместим ваш запрос! – Hawk

+0

Просьба представить минимальный пример того, что вы пытаетесь достичь (включая операторы DDL и DML для создания соответствующих таблиц и выборочных данных) и сообщить нам, какими будут ожидаемые результаты. Существуют различные возможности для устранения самосоединений (иногда с использованием аналитических функций или иерархических запросов), но в равной степени может быть и то, что невозможно исключить объединение), но мы не можем помочь, если мы не знаем, в чем проблема. – MT0

+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; 
+0

Perfect. Это именно то, что я искал. –

 Смежные вопросы

  • Нет связанных вопросов^_^