2010-08-02 6 views
1

Voici la documentation: http://download-east.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.htmexécution de la requête hiérarchique Oracle étapes

Voici l'ordre d'exécution décrit:

  1. Une jointure, si elle est présente, est évalué d'abord, si la jointure est spécifiée dans FROM clause ou avec WHERE clause prédicats. La condition CONNECT BY est évaluée.
  2. Les prédicats restants de la clause WHERE sont évalués.

Ma question est, est-ce que la partie 1. ci-dessus s'applique aux requêtes imbriquées. Par exemple, si j'ai:

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) 

Est-ce que la jointure dans la clause where s'exécuté immédiatement, ou, depuis foo.foo_id dans ce contexte est effectivement une valeur unique, est-il exécuté en partie 3 où le reste de les restrictions conditionnelles à valeur unique sont exécutées?

Répondre

2

Ce que vous avez posté est une sous-requête corrélée.

Parce qu'il n'y a pas REJOIGNEZ - les étapes 2 & 3 seront effectuées:

2) La CONNECT BY condition est évaluée.
3) Les prédicats restants de la clause WHERE sont évalués