查询表中的分层项

时间:2014-08-14 16:28:24

标签: sql oracle hierarchical-data

我们有一个内部表格,作为以下格式的分层数据。 Items是包含项列表的父表。但是,项目之间的关系保留在std_item_rel

约束:

  • items.item_id(PK) = std_item_rel.std_item_down(PK)(FK)
  • items.item_id_sd(PK) = std_item_rel.item_id_sd_dwn(PK)(FK)
  • std_item_rel.std_item_up (fk) to std_item_rel.std_item_dwn
  • std_item_rel.item_id_sd_up (fk) to std_item_rel.item_id_sd_dwn

如何编写查询以从示例模式中获取项123的所有从属值?

item_id | item_id_sd|  item_desc
----------------------------
123     |  A        |  Some description

std_item_rel

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:

通过在nocycle子句中添加connect by param来修复它。

1 个答案:

答案 0 :(得分:1)

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

See also this SQLFiddle