求解SQL排序问题获得最后一个

北方蛮子 发布于 2012/09/14 13:08
阅读 628
收藏 1

假设我有两张表:A、B 

A的表结构是: 

ID Name CODE 

1     w       e 

2     f        b 

3     k        z 

4     o        p

5     u        i 

 B的表结构是:

 ID    A_ID    AGO_A_ID 

1       3             0 

2       5             3 

3       1             4 

4       4             2 

5       2             5 

请问我怎么根据表B获得这个排序的最有一个A的NAME和CODE 

A_ID: 当前环节ID 

AGO_A_ID:前置环节ID,前置环节ID=0时是开始

比如根据当前数据得到的结果就是:(1,w,e)

加载中
1
酒逍遥
酒逍遥
关键找出 B 表中 A_ID 存在在不存在于  AGO_A_ID 的值..比如  1 就可以得到最终的节点
酒逍遥
酒逍遥
回复 @北方蛮子 : 哦 明白了..sql实现起来有点复杂啊
北方蛮子
北方蛮子
这个,我的意思就是上面那位仁兄说的,这是一个数据结构 相当于A_ID排序为:3、5、2、4、1这样 不过这个排序不是直接给出的,而是给的每一个节点的前置环节 求最后一个节点的值
1
Eric贰
Eric贰

引用来自“JAVA囧”的答案

我终于看懂了。。数据结构,求最后一个节点

select at.* from (select a_id from b start with ago_a_id=0 connect by prior a_id=ago_a_id order by rownum desc) bt, a at where at.id=bt.a_id and rownum <=1;

 

费了半天劲才憋出来的。。。。在10g 上已测

1
Eric贰
Eric贰

引用来自“酒逍遥”的答案

关键找出 B 表中 A_ID 存在在不存在于  AGO_A_ID 的值..比如  1 就可以得到最终的节点
@酒逍遥
这个想法好,SQL立马简单了。。。学习了

select at.* from b bt ,a at where bt.a_id not in(select ago_a_id from b) and at.id=bt.a_id;
0
Eric贰
Eric贰
我终于看懂了。。数据结构,求最后一个节点
0
北方蛮子
北方蛮子

引用来自“JAVA囧”的答案

引用来自“酒逍遥”的答案

关键找出 B 表中 A_ID 存在在不存在于  AGO_A_ID 的值..比如  1 就可以得到最终的节点
@酒逍遥
这个想法好,SQL立马简单了。。。学习了

select at.* from b bt ,a at where bt.a_id not in(select ago_a_id from b) and at.id=bt.a_id;

谢了!大哥的这两个方法我都看了,第一个是我一直在想的,但是写不出来,第二个方法确实简单明了,实在是个好方法,当然也很感谢@酒逍遥 的宝贵意见,实在是感谢两位的帮助

0
酒逍遥
酒逍遥

呵呵 @JAVA囧 实干派啊...我只是提了思路...没去细想怎么用sql去实现..

互相学习 互相学习哈

0
sxgkwei
sxgkwei
其实我没看懂啥意思,汗颜啊。。
0
Cavalier
Cavalier
这是面试题吧
返回顶部
顶部