谁能向我解释以下两个查询之间的区别?尽管它们看起来相同,但结果却不同。
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 (..)
在第二个中,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;
阅读文档后,我得出以下结论。
这两个查询之间的一个区别是,第一个查询在
connect by
, 中有两个条件,以便识别关系 - 行必须不仅满足parent_id = prior concept_id
条件而且还满足exists
子句。而第二个只有一个条件。
使区别更加明显的查询部分是
start with
.在第一个查询中,所有带有 的行都
PARENT_ID = '11025'
将被返回并用作root
行。的两个条件connect by
将用于查找children
这些行的。该exists
条件不会应用于根行。另一方面,第二个查询将使用语句获取行
PARENT_ID = '11025'
并过滤它们exists
。结果,结果将完全不同。