2010-08-02 3 views
1

Вот документация: http://download-east.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.htmOracle иерархическая выполнения запроса шаги

Вот порядок выполнения описывает:

  1. Объединение, если он присутствует, оценивается первых, является ли объединение указано в ОТ или с предложением WHERE .
  2. Условие CONNECT BY - оценено.
  3. Оцениваются любые оставшиеся предложения WHERE предикаты.

Мой вопрос в том, что часть 1. сверху применяется к вложенным запросам. Например, если у меня есть:

select * from foo 
where exists (select 'x' from bar 
       where bar.foo_id = foo.foo_id 
       start with bar.id is null 
       connect by prior bar.id = bar.parent_id) 

ли присоединиться где положение получить выполняются немедленно, или, так как foo.foo_id в этом контексте фактически одно значение, является оно выполнено в части 3, где остальные выполняются однозначные условные ограничения?

ответ

2

Что вы разместили, это коррелированный подзапрос.

Поскольку нет JOIN - шаги 2 & 3 будут выполнены:

2) CONNECT BY состояния оценивается.
3) Рассчитываются любые оставшиеся предикаты предложения WHERE

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