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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- MySQL樹形遍歷MySql
- MySQL樹形遍歷(三)MySql
- MySQL 實現樹形的遍歷MySql
- 關於二叉樹的前序遍歷、中序遍歷、刪除元素、插入元素二叉樹
- 使用遞迴遍歷並轉換樹形資料(以 TypeScript 為例)遞迴TypeScript
- 資料結構——樹與二叉樹的遍歷資料結構二叉樹
- Python資料結構——解析樹及樹的遍歷Python資料結構
- MySQL樹形遍歷(四)--程式碼優化MySql優化
- 資料結構 二叉樹遍歷資料結構二叉樹
- 樹的遍歷方式
- 資料結構與演算法——二叉樹的前序遍歷,中序遍歷,後序遍歷資料結構演算法二叉樹
- 資料結構之遍歷二叉樹資料結構二叉樹
- 資料遍歷
- 【資料結構】二叉樹的建立與遍歷資料結構二叉樹
- 二叉樹的建立、前序遍歷、中序遍歷、後序遍歷二叉樹
- 關於Map集合的遍歷總結
- 關於oracle中的sql資料型別OracleSQL資料型別
- 二叉樹的廣度遍歷和深度遍歷()二叉樹
- 用python講解資料結構之樹的遍歷Python資料結構
- 實戰資料結構(11)_二叉樹的遍歷資料結構二叉樹
- Javascript樹(一):廣度遍歷和深度遍歷JavaScript
- 【面試】基於二叉樹層次遍歷相關問題的求解面試二叉樹
- [MySQL] 實現樹形的遍歷(關於多級選單欄以及多級上下部門的查詢問題)MySql
- 樹的遍歷c/c++C++
- 二叉樹的遍歷二叉樹
- indexedDB 遍歷資料Index
- 二叉樹建立,前序遍歷,中序遍歷,後序遍歷 思路二叉樹
- 玩轉二叉樹(樹的遍歷)二叉樹
- JS遍歷樹狀資料,選擇需要的欄位重構一個新的樹狀資料JS
- 二叉樹---遍歷二叉樹
- 二叉樹遍歷二叉樹
- 二叉樹的遍歷 → 不用遞迴,還能遍歷嗎二叉樹遞迴
- 完全二叉樹的遍歷二叉樹
- Matlab對資料夾的層次遍歷和深度遍歷Matlab
- 資料結構與演算法-二叉樹遍歷資料結構演算法二叉樹
- C++樹——遍歷二叉樹C++二叉樹
- 144.二叉樹的前序遍歷145.二叉樹的後序遍歷 94.二叉樹的中序遍歷二叉樹
- jquery遍歷得到的 Map 資料,jQuery