[英]How to get information of root node for leaf node using SQL
假設我有一個具有以下結構的表:
---------------------------------------------------
TREE_GID | NODE_ID | PARENT_NODE_ID | TREE_NAME |
---------------------------------------------------
1 | 1 | | A |
1 | 2 | 1 | |
1 | 3 | 1 | |
1 | 4 | 2 | |
1 | 5 | 4 | |
1 | 6 | | B |
1 | 7 | 6 | |
2 | 1 | | C |
2 | 2 | 1 | |
---------------------------------------------------
注意:
我想在每個節點中顯示TREE_NAME。 輸出應類似於:
---------------------------------
TREE_ID | NODE_ID | TREE_NAME |
---------------------------------
1 | 1 | A |
1 | 2 | A |
1 | 3 | A |
1 | 4 | A |
1 | 5 | A |
1 | 6 | B |
1 | 7 | B |
2 | 1 | C |
2 | 2 | C |
---------------------------------
我怎樣才能得到它們?
遞歸公用表表達式將以一種相當簡單的方式來完成它;
WITH cte(tree_gid, node_id, tree_name) AS (
SELECT tree_gid, node_id, tree_name FROM mytable WHERE tree_name IS NOT NULL
UNION ALL
SELECT m.tree_gid, m.node_id, cte.tree_name
FROM mytable m
JOIN cte ON cte.node_id = m.parent_node_id AND cte.tree_gid = m.tree_gid
)
SELECT * FROM cte
ORDER BY tree_gid, node_id;
編輯:您也可以使用CONNECT BY
如您的評論鏈接所述;
SELECT tree_gid, node_id, CONNECT_BY_ROOT tree_name
FROM mytable
START WITH tree_name IS NOT NULL
CONNECT BY PRIOR node_id = parent_node_id AND PRIOR tree_gid = tree_gid
ORDER SIBLINGS BY tree_gid, node_id;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.