Oracle兼容之层次查询:层次查询高级特性分析
2008-09-04 12:50:44 来源:WEB开发网查询结果为:
LEVEL
PATH_A2PATH_A1PATH_PPATH_CAAPC3/0/0/1/0/0/1/0/1/11/1/11/11111111112/0/1/0/1/0/1/1/11111113/0/1/1/0/1/1/0/1/11/1/11/11111111111/1/1/0/111013/1/0/1/1/0/1/0/1/11/1/11/11111111112/1/1/1/1/0/1/1/11111113/1/1/1/1/1/1/0/1/11/1/11/1111111111
其层次结构图如图4所示。
从结果的路径信息可以看出,connect by查询的直接数据集是都满足t1.a=t2.a的条件,但是路径中有t1.a=0的情况,也就是说,采用的是第3种处理方式:connect by查询的数据集不是σt1.a=t2.a and t1.a=1(t1×t2)也不是t1×t2,而是σt1.a=t2.a(t1×t2)。语句2可以等价于查询Select …… from (select …… from t1,t2 where t1.a=t2.a) where t1.a=1 connect by prior c=p start with p=0;
对于用and连接起来的单个逻辑表达式涉及到单表和多表的where语句,在层次查询时,将涉及多表的逻辑表达式作为connect by之前的连接条件使用,而余下的作为connect by查询之后的过滤条件使用。
简单情况4
情况4讨论由OR连接不同类型子逻辑表达式的WHERE语句的情况。
语句4:
Selectlevel,
sys_connect_by_path(t2.a,'/')path_a2,
sys_connect_by_path(t1.a,'/')path_a1,
sys_connect_by_path(p,'/')path_p,
sys_connect_by_path(c,'/')path_c,t2.a,t1.a,p,c
fromt1,t2
wheret1.a=t2.aort1.a=1
connectbypriorc=pstartwithp=0andt1.a=1andt2.a=0;
更多精彩
赞助商链接