我不知道什么最好的方法是获得我要找的结果。在一个oracle 10g数据库中,我试图查询所有用户,并为每个有主管人员的行生成一个计算字段,如果他们的主管类型是U.如果不是,我需要走到树上直到找到一个。这个查询可能需要递增多个级别。我需要一个递归查询来获得在oracle中的计算字段
所以对于一个Employee表是这样的:
Employee Table
+-------+----------+--------------+---------------+
| empno | empgroup | user | supervisor_no |
+-------+----------+--------------+---------------+
| 1 | E | Joe Schmo | 4 |
| 2 | E | Mark Marin | 3 |
| 3 | U | Reed Patter | 7 |
| 4 | E | Martin Price | 7 |
| 7 | U | Mary Wengert | |
+-------+----------+--------------+---------------+
我希望看到这样的结果,其中manager_no将计算出的字段
Results
+-------+----------+--------------+---------------+------------+
| empno | empgroup | user | supervisor_no | Manager_No |
+-------+----------+--------------+---------------+------------+
| 1 | E | Joe Schmo | 4 | 7 |
| 2 | E | Mark Marin | 3 | 3 |
| 3 | U | Reed Patter | 7 | 7 |
| 4 | E | Martin Price | 7 | 7 |
| 7 | U | Mary Wengert | | |
+-------+----------+--------------+---------------+------------+
好了,所以我一直在问我试过。我并不是说这是必须这样做的方式,如果有人有更好的建议,我全都是耳朵,但这是我想要实现的。
我想象了两部分。
select * from employee em
connect by prior supervisor_no = empno
start with empno = 1
[结果] [2]:即得到所有我的结果
select em.empno, em.empgroup, em.user, em.supervisor, (my subquery) as manager_no
from employee em
查询主查询
| EMPNO | EMPGROUP | USERNAME | SUPERVISOR_NO |
---------------------------------------------------
| 1 | E | Joe Schmo | 4 |
| 4 | E | Martin Price | 7 |
| 7 | U | Mary Wengert | (null) |
好吧,我找到了一种方法来筛选对可能工作的团队,但不知道这是否是最有效的路线。
SELECT empno FROM (
SELECT empno FROM employee em
CONNECT BY PRIOR supervisor_no = empno
START WITH empno = 1
order by level) d
WHERE d.empgroup = 'U' and rownum =1
我也创建了一个小提琴,如果有帮助。 http://www.sqlfiddle.com/#!4/c8805/4
公平问题。我不确定这是否是我需要的,但我确实需要不断询问每个人的主管,直到获得符合我标准的人员。我会在我能尽快尝试的问题上添加更多信息。谢谢。 – Josh
为你的SQL小提琴+1。 – jpmc26