oracle 得到一个树,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語句如下:
SELECTid, 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, '');
總結
以上是生活随笔為你收集整理的oracle 得到一个树,Related to Oracle SQL 关于树形数据的遍历的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: oracle ebs技术开发,Oracl
- 下一篇: udp模拟tcp java_Java简单