我需要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] 删除。
我来说两句