一张自身关联的表catalog,结构如下
id title parentid
主键 标题 父id
1 硬件 0
2 外设 1
3 打印机 2
4 软件 0
5 惠普打印机 3
6 存储器 1
7 系统软件 4
8 外存储器 6
9 内存储器 6
10 硬盘 8
.
这里parentid关联id,id=0的表示最顶层的根。嵌套的层次允许有无穷多(只列举出了3层)我现在要把所有的数据列出来,生成一个有如下结构的下拉框:
硬件
|-外设
|-打印机
|-惠普打印机
.....
|-存储器
|-外存储器
|-硬盘
|-内存储器
|-软件
|-系统软件求这样的sql。
id title parentid
主键 标题 父id
1 硬件 0
2 外设 1
3 打印机 2
4 软件 0
5 惠普打印机 3
6 存储器 1
7 系统软件 4
8 外存储器 6
9 内存储器 6
10 硬盘 8
.
这里parentid关联id,id=0的表示最顶层的根。嵌套的层次允许有无穷多(只列举出了3层)我现在要把所有的数据列出来,生成一个有如下结构的下拉框:
硬件
|-外设
|-打印机
|-惠普打印机
.....
|-存储器
|-外存储器
|-硬盘
|-内存储器
|-软件
|-系统软件求这样的sql。
2 UNION ALL
3 SELECT 2 ID,'外設' TITLE,1 PARENTID FROM DUAL
4 UNION ALL
5 SELECT 3 ID,'打印機' TITLE,2 PARENTID FROM DUAL
6 UNION ALL
7 SELECT 4 ID,'軟件' TITLE,0 PARENTID FROM DUAL
8 UNION ALL
9 SELECT 5 ID,'惠普打印機' TITLE,3 PARENTID FROM DUAL
10 UNION ALL
11 SELECT 6 ID,'存儲器' TITLE,1 PARENTID FROM DUAL
12 UNION ALL
13 SELECT 7 ID,'系統軟件' TITLE,4 PARENTID FROM DUAL
14 UNION ALL
15 SELECT 8 ID,'外存儲器' TITLE,6 PARENTID FROM DUAL
16 UNION ALL
17 SELECT 9 ID,'內存儲器' TITLE,6 PARENTID FROM DUAL
18 UNION ALL
19 SELECT 10 ID,'硬盤' TITLE,8 PARENTID FROM DUAL
20 )
21 select SYS_CONNECT_BY_PATH(TITLE,' ') from A
22 START WITH PARENTID=0
23 CONNECT BY PARENTID=PRIOR ID
24 /
SYS_CONNECT_BY_PATH(TITLE,'')
--------------------------------------------------------------------------------
硬件
硬件 外設
硬件 外設 打印機
硬件 外設 打印機 惠普打印機
硬件 存儲器
硬件 存儲器 外存儲器
硬件 存儲器 外存儲器 硬盤
硬件 存儲器 內存儲器
軟件
軟件 系統軟件
start with parentid=0
connect by prior id=parentidLPAD('',PARENTID)||TITLE
--------------------------硬件
外设
打印机
惠普打印机
存储器
外存储器
硬盘
内存储器
软件
系统软件已选择10行。