社区
基础和管理
帖子详情
请教如何遍历一个树的问题
zoouii
2007-07-02 09:39:20
表结构是这样的:
deptid 部门编号
deptname 部门名称
order 排序用的序号
fatherid 上级部门编号
其中有一个fatherid为0的根节点。
要求查询结果按照树的上下顺序排列,每个部门下面是它的子部门,同级别的部门按照order排序。
根部门
一级部门1
一级部门1的子部门1
一级部门1的子部门1的子部门1
一级部门1的子部门2
一级部门2
一级部门2的子部门1
。
。
。
...全文
555
9
打赏
收藏
请教如何遍历一个树的问题
表结构是这样的: deptid 部门编号 deptname 部门名称 order 排序用的序号 fatherid 上级部门编号 其中有一个fatherid为0的根节点。 要求查询结果按照树的上下顺序排列,每个部门下面是它的子部门,同级别的部门按照order排序。 根部门 一级部门1 一级部门1的子部门1 一级部门1的子部门1的子部门1 一级部门1的子部门2 一级部门2 一级部门2的子部门1 。 。 。
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
9 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
rainv
2007-07-03
打赏
举报
回复
mark
zoouii
2007-07-02
打赏
举报
回复
1980czd(川中岛) :
OK了,多谢。结贴。
1980czd
2007-07-02
打赏
举报
回复
select lpad(' ',level,' ')||a.deptname from (select * from table_name oder by fatherid,order) a
start with deptid=4
connect by fatherid =prior deptid
再试一下
zoouii
2007-07-02
打赏
举报
回复
1980czd(川中岛):
还是不行,要求在同一级别中,按照order字段来排序,即如果有三个一级部门的order是1、3、5,那么3和5在1的后面,如果1又有3个子部门order是1、2、3,则这三个子部门要按1、2、3排列在一级部门1的后面并在后两个一级部门前面。
1980czd
2007-07-02
打赏
举报
回复
select lpad(' ',level,' ')||a.deptname from (select * from table_name oder by deptid ) a
start with deptid=4
connect by fatherid =prior deptid
看下这样行不
xiaoxiao1984
2007-07-02
打赏
举报
回复
SQL> select * from tts;
DEPTID DEPTNAME order FATHERID
-------------------- -------------------- -------------------- --------------------
1 根部门 0
101 一级部门1 0
102 一级部门2 0
10101 子部门1 101
10102 子部门2 101
10201 子部门1 102
10202 子部门2 102
10203 子部门3 102
8 rows selected
SQL>
SQL> select deptid, Ltrim(SYS_CONNECT_BY_PATH (deptname, '的'), '的') from tts
2 connect by prior deptid = fatherid
3 start with fatherid = '0'
4 /
DEPTID LTRIM(SYS_CONNECT_BY_PATH(DEPT
-------------------- --------------------------------------------------------------------------------
1 根部门
101 一级部门1
10101 一级部门1的子部门1
10102 一级部门1的子部门2
102 一级部门2
10201 一级部门2的子部门1
10202 一级部门2的子部门2
10203 一级部门2的子部门3
8 rows selected
zoouii
2007-07-02
打赏
举报
回复
1980czd(川中岛):
用你的方法可以满足每个部门下面跟着它的子部门,但是没有满足同级部门按照order排序。
TodayZ(天山浪子):
你的方法不错我正在试。
TodayZ
2007-07-02
打赏
举报
回复
比较简单的方法是创建一个函数,输入参数是该表的主键或唯一键,输出是该记录的完整的部门编号(包括该部门的所有的上级部门编号),举例:0-001-002-001 就是该公司一级部门1的子部门2的子部门1,然后在按照这个函数的值作为伪码进行排序。这个函数还有用于查询该部门下的所有下属部门的功能。
1980czd
2007-07-02
打赏
举报
回复
select lpad(' ',level,' ')||a.deptname from table_name a
start with deptid=4
connect by fatherid =prior deptid
C++课程设计-单链表——学生信息管理系统.docx
但是当要进行查找、删除、修改操作时,系统只能对第
一个
对象进行操作 查看程序时,发现查找函数、删除和修改函数都有个逻辑错误 C++课程设计-单链表——学生信息管理系统全文共9页,当前为第6页。全部修改后,程序...
php无限极分类 非递归,
请教
预排序
遍历
树
算法(非递归无限极分类算法) ,删除
一个
分支节点和它所有的子节点
问题
...
删除
一个
分支节点和它所有的子节点,从网上看到一段代码,发现这个是错的,
请教
一下,这个怎么写SQL,谢谢!回复讨论(解决方案)http://blog.163.com/023_dns/blog/static/118727366201271492450798/ 参考的是这里的...
Python训练营103期开班典礼直播回放
#《5天Python闯关训练营》学习计划#挑战周期:12月16日—12月20日直播安排:开班典礼:12...完成相应的软件安装及环境搭建学习服务:12.16-12.20日为本课正式服务周期期间遇到学习
问题
可社群
请教
,群内安排助教老师答疑
链表创建和链表
遍历
链表创建和链表
遍历
328、
请教
一个
Redis bitmap做签到功能的
问题
。 统计近7天连续签到用户数,bitop+bitcount是怎么用的?
请教
一个
Redis bitmap做签到功能的
问题
。 统计近7天连续签到用户数,bitop+bitcount是怎么用的? 假设每个用户每月
一个
key,SETBIT sign:[userID]:202201 24 1
遍历
所有用户吗? 一天
一个
bitmap,近七天的签到...
基础和管理
17,377
社区成员
95,131
社区内容
发帖
与我相关
我的任务
基础和管理
Oracle 基础和管理
复制链接
扫一扫
分享
社区描述
Oracle 基础和管理
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章