高分求一个业务SQL的写法

whut_lcy 2008-01-03 09:11:51
一张自身关联的表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。
...全文
102 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
whut_lcy 2008-01-03
  • 打赏
  • 举报
回复
另外,我不知道怎么给分?
whut_lcy 2008-01-03
  • 打赏
  • 举报
回复
1,2楼的老大是够牛的,尤其2楼的,我4了一下,果然可以,给分

只可惜没有mysql下的,大家帮忙啊
fxianxian 2008-01-03
  • 打赏
  • 举报
回复
能幫的就這么多了
要是就是3層的話,可以按照你說的實現
whut_lcy 2008-01-03
  • 打赏
  • 举报
回复
谢谢上面两位老大的sql,忘了说了,我的是在mysql下的表,又该怎么迁移过来?麻烦再帮忙一下!如果奏效,我会给分的
gxlineji 2008-01-03
  • 打赏
  • 举报
回复
select lpad(' ',parentid)||title from t
start with parentid=0
connect by prior id=parentid

LPAD('',PARENTID)||TITLE
--------------------------

硬件
外设
打印机
惠普打印机
存储器
外存储器
硬盘
内存储器
软件
系统软件

已选择10行。
fxianxian 2008-01-03
  • 打赏
  • 举报
回复
SQL> WITH A AS (SELECT 1 ID,'硬件' TITLE,0 PARENTID FROM DUAL
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,'')
--------------------------------------------------------------------------------
硬件
硬件 外設
硬件 外設 打印機
硬件 外設 打印機 惠普打印機
硬件 存儲器
硬件 存儲器 外存儲器
硬件 存儲器 外存儲器 硬盤
硬件 存儲器 內存儲器
軟件
軟件 系統軟件

17,078

社区成员

发帖
与我相关
我的任务
社区描述
Oracle开发相关技术讨论
社区管理员
  • 开发
  • Lucifer三思而后行
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧