Этапы выполнения иерархического запроса Oracle - PullRequest
1 голос
/ 02 августа 2010

Вот документация: http://download -east.oracle.com / docs / cd / B12037_01 / server.101 / b10759 / questions003.htm

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

  1. Соединение, если оно присутствует, оценивается во-первых, указано ли соединение в предложении FROM или 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)

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

1 Ответ

2 голосов
/ 02 августа 2010

То, что вы опубликовали, является коррелированным подзапросом.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...