Oracle Connect By

时间:2017-06-30 14:35:36

标签: sql oracle

这个问题与我之前的问题有一些关系: Oracle SQL Connect By Logic

表:

getPosts { result in
    switch result {
    case .success(let json): print(json)
         // process json 
    case .failure(let error): print(error)
         // handle error
    }
}

数据:

create table temp (emp_id varchar2(3), manager_id varchar2(3))

我想创建一个查询,使用connect by上链来查找父 - 父记录,而不是获取子记录。

解决方案:

E10 E20
E20 E50
E30 E50
E40 E40
E50 E90
E90 E90

但是根据我的要求,我需要取出所有的父母和上述查询在E90停止。 [可能是因为NOCYCLE作为emp&经理在E90处是一样的。

查询输出:

Select EMP_ID 
from temp
     Start with EMP_ID = 'E20'
     Connect by  NOCYCLE  EMP_ID =  Prior MANAGER_ID
order by EMP_ID

必需输出:

E20
E50

请告知。

1 个答案:

答案 0 :(得分:2)

似乎周期就是问题。

通过在CONNECT BY子句中使用PRIOR运算符查看列来检测循环。

要打破这样的循环,您需要添加一些非常简单的条件,但在其他列上使用PRIOR运算符。

例如:对你的CONNECT BY子句,添加

and prior emp_id is not null

(假设emp_id永远不能为空)。