簡體   English   中英

Oracle Sql查詢分層數據的有序輸出

[英]Oracle Sql query for ordered output of hierarchical data

我有一個包含多個列的表 temp_table,如 person_id 和 manager_id、person_name、manager_name。

我必須將基於此表的人員記錄插入或更新到人員表,但我必須選擇具有層次結構的記錄。

如果數據是這樣的(對於第三個記錄管理器已經存在於表中):

PerId PerName MgrId  MgrName
65202 Test1    65201 Test
65203 Test2    65202 Test1
65201 Test     64523 AlreadyPre

我必須編寫一個查詢,首先返回第 3 條記錄,然后返回第 1 條記錄,然后返回第 2 條記錄。

我嘗試編寫一個自連接來選擇這樣的記錄,其中 person id = manager id 在我的臨時表中並插入那些但無法正確排序的記錄。

使用分層查詢:

SELECT *
FROM   temp_table
START WITH mgrName = 'AlreadyPre'
CONNECT BY PRIOR PerId = MgrId
ORDER SIBLINGS BY PerName

因此,對於您的測試數據:

CREATE TABLE temp_table (PerId, PerName, MgrId, MgrName) AS
SELECT 65202, 'Test1', 65201, 'Test' FROM DUAL UNION ALL
SELECT 65203, 'Test2', 65202, 'Test1' FROM DUAL UNION ALL
SELECT 65201, 'Test',  64523, 'AlreadyPre' FROM DUAL;

這輸出:

\n佩里德 | 姓名 |  MGRID |  MGRNAME   \n ----: |  :------ |  ----: |  :---------\n 65201 | 測試 |  64523 | 已經預\n 65202 | 測試 1 |  65201 | 測試      \n 65203 | 測試2 |  65202 | 測試1     \n

或者,如果您不想對起始行進行硬編碼,則:

SELECT *
FROM   temp_table
START WITH mgrId NOT IN ( SELECT PerId FROM temp_table )
CONNECT BY PRIOR PerId = MgrId
ORDER SIBLINGS BY PerName

輸出與上面相同。

db<> 在這里小提琴

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM