2016-06-26 41 views
0

我有users_entities表,它包含用户,他们的实体和他们的依赖实体。喜欢这个。递归Sybase Select

|user | entity | dependant entity| 
---------------------------------- 
| 122 | 746414 |  null  | 
| 122 | 746410 |  746414  | 
| 122 | 746405 |  746414  | 
| 333 | 746403 |  746405  | 

所以,用一个

select entity from users_entities where user = 122 

我得到:706414,706410和746405.

所有地方122负责的实体,但我也有来显示所有的依赖这些实体的实体。所以,我也必须表现出746403因为它依赖的746405.

这是一个树形结构

74614 
    | 
746405 
    | 
746403 

我想我必须做一个递归选择,但我不能把它做。它可以用一个选择完成吗?或者我将不得不做一个功能或存储过程?谢谢。

编辑 哦,我忘了。他们可以是多层次的家属。

+0

你可以有多个级别? – sgeddes

+0

@sgeddes是的,我可以有多个级别的家属。对不起,我忘了那部分。 – user3063952

回答

0

你必须做一个自我加入。但是你需要知道最高级别的数量。如果最大值是5,那么你可以编写一个5路自连接。当使用外连接谓词时,它应该能够处理小于该数量级别的任何内容。 像这样的东西(我没有测试查询,但你会明白我的意思,这是最大3级做到,但你可以扩展它):家属的

select t1.user as user1, t2.user as user2, t3.user as user3 
from 
users_entities t1 
left outer join users_entities t2 
on t1.entity = t2.entity 
left outer join users_entities t3 
on t2.entity = t3.entity 
where t1.user = 122