首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Oracle,选择relation

Oracle,选择relation
EN

Stack Overflow用户
提问于 2014-01-06 07:10:32
回答 2查看 208关注 0票数 2

我在oracle DB中有两个表:Item和Relationship。

项目:

代码语言:javascript
运行
复制
ID   
---
1
2
3
4
5
6
7

关系:

代码语言:javascript
运行
复制
ID    parent  child 
--------------------
1     1       2
2     1       3
3     1       4
4     2       5
5     2       6
6     3       7

在relationship表中,我要存储"items“的层次结构(不要问它为什么存储在不同的表中)。

问题是:

当我执行这个查询时:

代码语言:javascript
运行
复制
SELECT PARENT_ID, CHILD_ID, CONNECT_BY_ISLEAF, MAX(LEVEL) OVER () + 1 - LEVEL as rev_level
  FROM relationship
CONNECT BY PRIOR PARENT_ID = CHILD_ID
  START WITH CHILD_ID = 7;

我没有看到根父级,因为它作为子表不存在于此表中。

问题是如何将根父(ID= 1)添加到查询结果中,或者如何使用"items“表将其连接起来,并保留结果列(level和isleaf)。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-01-06 08:16:11

  1. 当使用自下而上的搜索时,CONNECT_BY_ISLEAF的工作方式正好相反(参见此链接isleaf-function-for-recursive-subquery-factoring-dedicated-to-anton/)。
  2. 我假设您希望显示更多关于该项的数据(如名称),如果是这样的话,只需离开join表即可。 选择PARENT_ID作为PARENT_ID,CHILD_ID,i.name作为CHILD_NAME,CONNECT_BY_ISLEAF,MAX( LEVEL ) OVER () +1-级别作为rev_level,从我留下的连接关系r ON (i.id = r.CHILD_ID)按优先PARENT_ID = CHILD_ID连接,从REV_LEVEL的CHILD_ID =7顺序开始;

检查这个SQLfiddle:http://sqlfiddle.com/#!4/5c9fa/17,另外检查这篇关于自下而上搜索的文章(http://bitbach.wordpress.com/2010/10/18/implementing-bottom-up-path-traversal-for-hierarchical-tables/)

票数 0
EN

Stack Overflow用户

发布于 2014-01-06 07:23:50

注意,你有两个方向--父母和孩子。选一个,不要把两者混在一起。

代码语言:javascript
运行
复制
  1  with x as (
  2     select 1 as id, 1 as parent, 2 as child from dual union all
  3     select 2,            1           , 3  from dual union all
  4     select 3            ,1,            4  from dual union all
  5     select 4            ,2,            5  from dual union all
  6     select 5            ,2,            6  from dual union all
  7     select 6            ,3,            7  from dual)
  8  select *
  9  from       x
 10  sTART WITH child = 7
 11* CONNECT BY PRIOR id= CHILD
SQL> /

        ID     PARENT      CHILD
---------- ---------- ----------
         6          3          7
         5          2          6
         4          2          5
         3          1          4
         2          1          3
         1          1          2

连接是由prior id = child而不是prior parent = child创建的。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20944837

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档