Sql 查询表中的分层项

Sql 查询表中的分层项,sql,oracle,hierarchical-data,Sql,Oracle,Hierarchical Data,我们在内部有一个表,它是以下格式的分层数据项目是包含项目列表的父表。但是,项目之间的关系保存在std\u item\u rel表中 约束条件: items.item\u id(PK)=std\u item\u rel.std\u item\u down(PK)(FK) items.item\u id\u sd(PK)=std\u item\u rel.item\u id\u sd\u dwn(PK)(FK) std\u item\u rel.std\u item\u up(fk)至std\u

我们在内部有一个表,它是以下格式的分层数据<代码>项目是包含项目列表的父表。但是,项目之间的关系保存在
std\u item\u rel
表中

约束条件:

  • items.item\u id(PK)=std\u item\u rel.std\u item\u down(PK)(FK)
  • items.item\u id\u sd(PK)=std\u item\u rel.item\u id\u sd\u dwn(PK)(FK)
  • std\u item\u rel.std\u item\u up(fk)至std\u item\u rel.std\u item\u dwn
  • std_item_rel.item_id_sd_up(fk)至std_item_rel.item_id_sd_dwn
如何编写查询以从下面的示例架构中获取item
123
的所有从属值

项目

item_id | item_id_sd|  item_desc
----------------------------
123     |  A        |  Some description
std\u项目相关

std_item_dwn | item_id_sd_dwn | item_id_sd_up | std_item_up 
------------------------------------------------------------
123          |   A            |     null      | null
125          |   C            |     A         | 123
129          |   C            |     C         | 125

更新: 我得到的错误是:

ORA-01436: CONNECT BY loop in user data
01436. 00000 -  "CONNECT BY loop in user data"
*Cause:    
*Action:

通过在
connect by
子句中添加
nocycle
参数来修复此问题。

connect by
应提供相当简单的解决方案,如下所示:

SELECT     std_item_down
FROM       std_item_rel
CONNECT BY std_item_up = PRIOR std_item_down
START WITH std_item_down = 123

如果我必须连接多个列怎么办?它有相同的语法吗?(为了简单起见,我隐藏了PK的其他列)我猜不出您的实际问题:-)语法基本相同,但是
connectby
通常不是很直观。所以,也许你可以在你的问题中添加一些额外的信息?修改为有更多的栏。。我在sql developer中尝试过,它似乎向我展示了一些使用关键字connect的编译错误。。我们使用oracle 10gbtwn@Zeus:如果您尝试了某项操作并出现错误,您还应在修改的问题中包含该代码和确切的错误消息。