1

私はこれにとても苦労しています、そしてどんな助けも素晴らしいでしょう。

Oracle10には次のような単純なテーブルがあります

Name | EmployeeID |  ManagerID | Title

特定の従業員IDのすべてのレポートを返すクエリが必要です

したがって、従業員ID 1000を渡すと、直属の部下をループし、次に間接的なレポートなどをループします。

再帰サンプルをいじりましたが、どれもうまくいかないようです。私はそれを正しく設定していないことを知っています。助けてくれてありがとう。

ご参考までに。これに関するSQLクエリを探しています。

4

2 に答える 2

2

このようなものが機能するはずです:

select lpad(' ', 2*(level-1)) || name as employeename
from employee_table
start with employeeid = 1000
connect by prior employeeid = managerid; 

lpad()関数を使用して結果をインデントし、誰が誰に報告するかを確認できるようにします。

結果にemployeeid1000を含めたくない場合は、以下を変更してください。

start with employeeid = 1000

に:

start with managerid = 1000
于 2012-04-11T20:57:40.440 に答える
2

まず、テストデータを設定しましょう...

CREATE TABLE EMPLOYEE (
    EMPLOYEE_ID INT PRIMARY KEY,
    MANAGER_ID INT,
    NAME VARCHAR2(20),
    TITLE VARCHAR2(20),
    FOREIGN KEY (MANAGER_ID) REFERENCES EMPLOYEE (EMPLOYEE_ID)
);

INSERT INTO EMPLOYEE(EMPLOYEE_ID, NAME, TITLE) VALUES (1, 'Rob', 'CEO');
    INSERT INTO EMPLOYEE VALUES (2, 1, 'Bob', 'Manager');
        INSERT INTO EMPLOYEE VALUES (3, 2, 'Matilda', 'Secretary');
    INSERT INTO EMPLOYEE VALUES (4, 1, 'Steve', 'Manager');
        INSERT INTO EMPLOYEE VALUES (5, 4, 'John', 'Senior Worker');
            INSERT INTO EMPLOYEE VALUES (6, 5, 'Paul', 'Junior Worker');
        INSERT INTO EMPLOYEE VALUES (7, 4, 'Anny', 'Senior Worker');

次のクエリは、Steveと彼のすべての部下を再帰的に返します。

SELECT *
FROM EMPLOYEE
START WITH EMPLOYEE_ID = 4
CONNECT BY PRIOR EMPLOYEE_ID = MANAGER_ID;

EMPLOYEE_ID        MANAGER_ID         NAME                 TITLE                
------------------ ------------------ -------------------- -------------------- 
4                  1                  Steve                Manager              
5                  4                  John                 Senior Worker        
6                  5                  Paul                 Junior Worker        
7                  4                  Anny                 Senior Worker        

「反転」すると、PRIOR代わりにSteveの上司が表示されます。

SELECT *
FROM EMPLOYEE
START WITH EMPLOYEE_ID = 4
CONNECT BY EMPLOYEE_ID = PRIOR MANAGER_ID;

EMPLOYEE_ID        MANAGER_ID         NAME                 TITLE                
------------------ ------------------ -------------------- -------------------- 
4                  1                  Steve                Manager              
1                                     Rob                  CEO                  
于 2012-04-11T21:15:43.453 に答える