我不知道什麼最好的方法是獲得我要找的結果。在一個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