2010-08-02 66 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子句謂詞