在 Oracle 分层查询中,WHERE-CLAUSE 应该在 oracle 文档中的 Connect-By 运算符之后进行评估。
但是有一些复杂的情况:如果 WHERE-CLAUSE 包含 JOIN-style 限定,正如 oracle 所说,Join-Style 限定应该在 Connect-By 运算符之前进行评估,而另一个仅引用一个关系的 none-Join-Style 将是在 Connect-By 运算符之后进行评估。
那么问题来了:如何将WHERE-CLAUSE中的限定符分为两部分,一是在Connect-By算子之前求值,另一个是在Connect-By算子之后求值。
example:
SQL> desc bar
Name Null? Type
----------------------------------------- -------- -----------------
B1 NUMBER(38)
B2 NUMBER(38)
SQL> desc foo;
Name Null? Type
----------------------------------------- -------- -----------------
F1 NUMBER(38)
F2 NUMBER(38)
SQL> set pagesize 3000
SQL> set linesize 3000
SQL> explain plan for select * from foo, bar where
2 **f1=b1 and (b2 = 1 or f1=b2 and b1=1 or f2=b1+1) …
Run Code Online (Sandbox Code Playgroud)