gia*_*kis 5 oracle hierarchy where
谁能向我解释以下两个查询之间的区别?尽管它们看起来相同,但结果却不同。
select concept.concept_id, concept.PARENT_ID
from ebti_thes_concept_v concept
start with PARENT_ID = '11025'
connect by parent_id = prior concept_id
and exists (..)
Run Code Online (Sandbox Code Playgroud)
在第二个中,exists
谓词从connect by
子句移动到where
子句。
select concept.concept_id, concept.PARENT_ID
from ebti_thes_concept_v concept
where exists (..)
start with PARENT_ID = '11025'
connect by parent_id = prior concept_id;
Run Code Online (Sandbox Code Playgroud)
阅读文档后,我得出以下结论。
两个查询之间的一个区别在于,第一个查询在 中具有两个条件,connect by
以识别关系 - 行不仅必须满足parent_id = prior concept_id
条件,还必须满足exists
子句。
connect by parent_id = prior concept_id
and exists (..)
Run Code Online (Sandbox Code Playgroud)
而第二个只有一个条件。
connect by parent_id = prior concept_id;
Run Code Online (Sandbox Code Playgroud)
使区别更加明显的查询部分是start with
.
在第一个查询中,PARENT_ID = '11025'
将返回所有行并用作root
行。的两个条件connect by
将用于查找children
这些行的 。该exists
条件不会应用于根行。
另一方面,第二个查询将PARENT_ID = '11025'
使用exists
语句获取行并过滤它们。
结果,结果将完全不同。
归档时间: |
|
查看次数: |
2585 次 |
最近记录: |