2016-10-20 15 views
0

У меня есть эта проблема: У меня есть оператор select, который довольно трудоемкий. Я должен сам присоединиться к результату. Я хочу сделать что-то вроде этого:Oracle join select result

Select table1.*, table2.Consumption 
from (heavy select statement) table1 left outer join 
(same heavy statement) table2 
on table1."id" = table2."id" and table1."Year" -1 = table2."Year" 

Я не хочу, чтобы поймать и те же данные в 2 раза. Я бы хотел сделать что-то вроде table1 table2. Это возможно? Мне нужно это для приложения, которое выполняет запросы, но не может использовать create или что-то вроде этого, иначе я бы сохранил данные в таблице.

ответ

0

Вы можете использовать выражение общей таблицы (КТР) и материализовать результаты тяжелого оператора выбора:

WITH heavy AS (SELECT /*+ MATERIALIZE */ ... (heavy select statemenet)) 
Select table1.*, table2.Consumption 
from heavy table1 left outer join 
heavy table2 
on table1."id" = table2."id" and table1."Year" -1 = table2."Year"