2010-08-02 62 views
1

这里的文档:http://download-east.oracle.com/docs/cd/B12037_01/server.101/b10759/queries003.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部分执行其中的其余部分单值条件限制是否被执行?

回答

2

你发布的是一个相关的子查询。

因为没有JOIN - 步骤2 & 3将被执行:

2)CONNECT BY条件进行评价。
3)评估任何剩余的WHERE子句谓词