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


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

...全文
167 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
l13873666736 2010-01-18
感觉LZ有点象郭靖练九阴真经
左右互博,结果把自己搞晕了。
回复
raul0759 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
回复
九浅一深 2010-01-13
rr
回复
发帖
Oracle
创建于2007-09-28

1.6w+

社区成员

Oracle开发相关技术讨论
申请成为版主
帖子事件
创建了帖子
2010-01-13 07:26
社区公告
暂无公告