oracle层次查询,挑战高手!!!

lixianzhang0493 2010-01-13 07:26:29
表内同如下:

字段A是字段B的父节点
字段B是字段C的父节点
字段C是字段D的父节点

字段A 字段B 字段C 字段D
1 2 3 a
1 2 3 b
1 2 4 c
1 2 4 d
1 2 4 e
1 3 5 o
1 3 5 p
1 3 5 l
2 6 7 a
2 6 8 b


要求查出的结果如下:

1 2
1 2 3
1 2 3 a
1 2 3 b
1 2 4
1 2 4 c
1 2 4 d
1 2 4 e
1 3
1 3 5
1 3 5 o
1 3 5 p
1 3 5 l
2 6
2 6 7
2 6 7 a
2 6 8
2 6 8 b


求助各位,这种层次查询有没有什么好的方法

...全文
188 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
l13873666736 2010-01-18
  • 打赏
  • 举报
回复
感觉LZ有点象郭靖练九阴真经
左右互博,结果把自己搞晕了。
raul0759 2010-01-15
  • 打赏
  • 举报
回复
构造出这种表结构的感觉有自虐倾向......
造楼主所说,应该可以利用原始表重新构造出一种更好的表结构来
yinghuaxianzi_0808 2010-01-15
  • 打赏
  • 举报
回复
一般这样的表应该只需要两个字段 父节点和子节点
难道楼主给的表就是一个已经处理过一次的?
不知道楼主想要什么样的方法?
根据你给的 字段A是字段B的父节点
字段B是字段C的父节点
字段C是字段D的父节点 这样的规律 三楼的方法我觉得就是最好的了!
fatfoxz 2010-01-14
  • 打赏
  • 举报
回复
《Oracle Database 11g SQL 开发指南》
第7.5节层次化查询 就讲这些东西,楼主有空看看吧!
比在这里问到的要全面。。
xtting_8984313 2010-01-14
  • 打赏
  • 举报
回复
lz思维有问题,通常要是做树的话,只记录父子关系就可以了,然后要求select出全部路径还有道理。
zyzx1986 2010-01-13
  • 打赏
  • 举报
回复
丢。。学习。。
jamejame 2010-01-13
  • 打赏
  • 举报
回复
表结构很混乱 希望可以贴出完整的!
小灰狼W 2010-01-13
  • 打赏
  • 举报
回复
没有理解你的意思...
能否描述一下原表的结构和对应的关系
最多4级的话,用关系表自关联,即可得出上面结果中的关系,再由id替换成名称
lixianzhang0493 2010-01-13
  • 打赏
  • 举报
回复
本来一张表是有父子关系的,但是有一段与另一段通过了一张关联表来关联父子关系,并没有在一张表里
小灰狼W 2010-01-13
  • 打赏
  • 举报
回复
那么原本的表结构是什么样的,为什么要弄成4个字段来查
lixianzhang0493 2010-01-13
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 wildwave 的回复:]
表结构很糟糕,太多冗余
[/Quote]

表的设计不是这样的, 这种4层父子关系还是我用关联关系查出来的
lixianzhang0493 2010-01-13
  • 打赏
  • 举报
回复

3楼是利用了数字规律来做的,实际数据中是没有这样规律的。

请问还有没有其他的方法?
小灰狼W 2010-01-13
  • 打赏
  • 举报
回复
表结构很糟糕,太多冗余
liusong_china 2010-01-13
  • 打赏
  • 举报
回复
huangchangmiao 2010-01-13
  • 打赏
  • 举报
回复
这种查询简直就是有病
liusong_china 2010-01-13
  • 打赏
  • 举报
回复
SQL> select * from tb;

A B C D
-- -- -- --
1 2 3 a
1 2 3 b
1 2 4 c
1 2 4 d
1 2 4 e
1 3 5 o
1 3 5 p
1 3 5 l
2 6 7 a
2 6 8 b

已选择10行。

SQL> select distinct a,b,null,null from tb
2 union all
3 select distinct a,b,c,null from tb
4 union all
5 select distinct a,b,c,d from tb
6 order by 1,2,3 nulls first,4 nulls first;

A B NU NU
-- -- -- --
1 2
1 2 3
1 2 3 a
1 2 3 b
1 2 4
1 2 4 c
1 2 4 d
1 2 4 e
1 3
1 3 5
1 3 5 l
1 3 5 o
1 3 5 p
2 6
2 6 7
2 6 7 a
2 6 8
2 6 8 b

已选择18行。
crazylaa 2010-01-13
  • 打赏
  • 举报
回复
要是我就用union拉倒。。。
select * from(
select a,b,' ' as c,' ' as d from tbl group by a,b
union all
select a,b, c,' ' as d from tbl group by a,b,c
unoin all
select a,b,c,d from tbl)
order by a,b,c,d
x359794605 2010-01-13
  • 打赏
  • 举报
回复
rr

17,082

社区成员

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

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