给定层次结构中的任何子级,请通过INFORMIX层次结构SQL提取完整的树

用户名

我需要Informix分层sql查询的一些帮助。我有以下结构的表:

create table empl_relation (
employee_id char(10),
manager_id char(10));

employee_id      |   manager_id
 5148                null              
 5149                5148
 5150                5149
 5151                5148
 5152                5151
 5154                5148
 5155                5154

我能够成功运行以下查询:

SELECT employee_id, manager_id FROM empl_relation  
    START WITH employee_id = 5148 
    CONNECT BY PRIOR employee_id = manager_id 
    ORDER  SIBLINGS BY employee_id;

它返回上表中指定的确切层次结构。但是,我试图在这里实现一些不同的目标。给定层次结构中的任何员工ID作为输入,我都试图获得相同的结果集。例如,在查询中,如果我将5154指定为输入employee_id,则应该能够获取输入雇员id的所有父母及其子女以及子女和孙子女。确切地说,我想要与通过运行上述查询得到的结果集完全相同的结果集。

是否可以在单个查询中实现?如果是,请您能帮助我实现这一目标吗?

                         EDIT

好的,我想出了一种方法来实现此目的,但是它涉及执行两个查询,如下所示:

SELECT employee_id, manager_id FROM empl_relation
    START WITH employee_id = 5150 
    CONNECT BY employee_id = PRIOR manager_id 
    ORDER   SIBLINGS BY employee_id ;

它将返回:

employee_id      |   manager_id
5148    
5149                  5148
5150                  5149

然后,我们可以遍历结果集,然后执行以下查询以获取完整的层次树,从而在应用程序层上检索父级employee_id:

SELECT employee_id, manager_id FROM empl_relation  
    START WITH employee_id = 5148 
    CONNECT BY PRIOR employee_id = manager_id 
    ORDER  SIBLINGS BY employee_id;

这将很好地工作,但是如果我可以在单个查询中实现这一点,那将真的很棒。

用户名

受到乔纳森(Jonathan)的答复的启发,我提出了他的查询的简短版本,如下所示

SELECT employee_id,manager_id FROM empl_relation
START WITH employee_id =
 (SELECT employee_id
   FROM empl_relation er
   WHERE er.manager_id IS NULL
   START WITH employee_id = 5150 CONNECT BY employee_id =
   PRIOR manager_id) 
 CONNECT BY
 PRIOR employee_id = manager_id
 ORDER BY employee_id;

这似乎也很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章