Related to Oracle SQL 關於樹形資料的遍歷
有這樣一組資料:
- ID COL1 PARID HAS_CHILD
- 001 a 0 1
- 002 b 0 1
- 003 c 001 0
- 004 d 001 0
- 005 e 002 1
- 006 f 002 0
- 007 g 005 0
- 008 h 005 0
希望以中序遍歷的方式得出以下遍歷結果:
- 001 a 0 1
- 003 c 001 0
- 004 d 001 0
- 002 b 0 1
- 005 e 002 1
- 007 g 005 0
- 008 h 005 0
- 006 f 002 0
- 005 e 002 1
- 007 g 005 0
- 008 h 005 0
這其實是多棵樹,001,002,以及002的子樹005,得到的是他們的遍歷結果:
使用的SQL語句如下:
SELECT id, col1, parid, has_child
FROM test t
CONNECT BY PRIOR id = parid -- 這句的作用是確定連線條件,PRIOR 放在ID前是從根開始遍歷,如果PRIOR 放在parid前則是從根進行遍歷,但是這實際上只能遍歷從葉節點往上的樹的一枝的資料。
START WITH has_child = 1 -- 這句的作用是確定符合根節點的條件
ORDER SIBLINGS BY id -- 對同一父節點下的子節點進行排序,如果只是使用普通的order會使結果又變成一個普通的沒有層次的資料。
建表SQL:
-- Create table
create table TEST
(
ID VARCHAR2(20),
COL1 VARCHAR2(20),
PARID VARCHAR2(20),
HAS_CHILD NUMBER
)
tablespace USERS
pctfree 10
initrans 1
maxtrans 255
storage
(
initial 64K
minextents 1
maxextents unlimited
);
測試資料SQL:
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('001', 'a', '0', 1, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('002', 'b', '0', 1, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('003', 'c', '001', 0, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('004', 'd', '001', 0, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('005', 'e', '002', 1, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('006', 'f', '002', 0, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('007', 'g', '005', 0, '');
insert into test (ID, COL1, PARID, HAS_CHILD, ROWID)
values ('008', 'h', '005', 0, '');
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/3090/viewspace-703848/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 使用遞迴遍歷並轉換樹形資料(以 TypeScript 為例)遞迴TypeScript
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- 資料結構 二叉樹遍歷資料結構二叉樹
- 樹的遍歷方式
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 用python講解資料結構之樹的遍歷Python資料結構
- 資料遍歷
- 樹的層次遍歷
- Oracle資料庫關於SQL的執行計劃(轉)Oracle資料庫SQL
- 關於Map集合的遍歷總結
- 二叉樹的遍歷二叉樹
- 樹的遍歷c/c++C++
- indexedDB 遍歷資料Index
- JS遍歷樹狀資料,選擇需要的欄位重構一個新的樹狀資料JS
- 玩轉二叉樹(樹的遍歷)二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- SQL Server通過建立臨時表遍歷更新資料SQLServer
- 二叉樹遍歷二叉樹
- 二叉樹---遍歷二叉樹
- N叉樹——前序遍歷
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- L2-006 樹的遍歷
- 完全二叉樹的遍歷二叉樹
- jquery遍歷得到的 Map 資料,jQuery
- leetcode 103. 二叉樹的鋸齒形層序遍歷 BFS方法LeetCode二叉樹
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 【資料結構&演算法】11-樹基礎&二叉樹遍歷資料結構演算法二叉樹
- 根據二叉樹的前序遍歷和中序遍歷輸出二叉樹;二叉樹
- 力扣#94 樹的中序遍歷力扣
- L2-006 樹的遍歷(BFS)
- bs4的使用 遍歷文件樹
- 二叉樹的按層遍歷二叉樹
- 二叉樹的遍歷實現二叉樹
- 二叉樹的層序遍歷二叉樹
- 二叉樹的遍歷筆記二叉樹筆記
- 掌握 React 元件樹遍歷技巧React元件
- 二叉樹遍歷方法二叉樹
- 二叉樹遍歷 -- JAVA二叉樹Java