2013-02-08 6 views
0

Я хочу optimze в follwing запроса, чтобы не использовать подзапрос, чтобы получить максимальное значение:оптимизация запросов с условием

select c.ida2a2 from table1 m, table2 c 
where c.ida3a5 = m.ida2a2 
and (c.createstampa2 < (select max(cc.createstampa2) 
         from table2 cc where cc.ida3a5 = c.ida3a5)); 

Любой идею? Пожалуйста, дайте мне знать, если вы хотите получить больше информации.

ответ

3

Это может быть более эффективным способом, чтобы написать запрос:

select c.ida2a2 
from table1 m join 
    (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs 
     from table2 c 
    ) c 
    on c.ida3a5 = m.ida2a2 
where c.createstampa2 < maxcs 

Я уверен, что Oracle оптимизирует это правильно (фильтрация строк до объединения). Если вы хотите быть более ясными:

select c.ida2a2 
from table1 m join 
    (select c.* 
     from (select c.*, MAX(createstampa2) over (partition by ida3a5) as maxcs 
      from table2 c 
      ) c 
     where c.createstamp2 < c.maxcs 
    ) c 
    on c.ida3a5 = m.ida2a2 
+0

@rs. , , , Ты прав. По какой-то причине у меня было условие 'where', используя таблицу' m', а не таблицу 'c'. –

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