请解释附上的查询

时间:2014-06-17 06:11:46

标签: sql oracle oracle11g oracle-sqldeveloper plsqldeveloper

民间,

有人可以帮我解释下面的问题吗?

 SELECT   SOME_ID ROOT_CAT,
          CHILD_ID SOME_ID
 FROM    CHILD_TABLE
 START WITH SOME_ID IN (SELECT ROOT_ID FROM ROOT_TABLE)
 CONNECT BY NOCYCLE SOME_ID = PRIOR CHILD_ID;

1 个答案:

答案 0 :(得分:2)

这用于获取分层数据,类似于父母 - 孩子 - 孩子的孩子等。

start with - 这标识树中所有LEVEL = 1个节点 connect by - 描述如何从上面的父节点走到他们的孩子和 他们的孩子。

一般语法是

select ... 
start with initial-condition 
connect by nocycle 
recurse-condition

connect by构造建立递归。通过使用SOME_ID = CHILD_ID找到属于下一个较低层级的所有记录。

CHILD_ID是在当前层级

中找到的值

您的查询可以类似于:

 SELECT   SOME_ID ROOT_CAT,
          CHILD_ID SOME_ID
 FROM    CHILD_TABLE
 START WITH SOME_ID IN (SELECT ROOT_ID FROM ROOT_TABLE)
 CONNECT BY NOCYCLE SOME_ID = PRIOR CHILD_ID;

 SELECT  PARENT_ID  CURRENT_PARENT,
         CHILD_ID   PARENT_ID_CURRENT_CHILD
 FROM LIST_OF_CHILDREN
 START WITH PARENT_ID IN ( SELECT SOME_RANDOM_PARENT_ID FROM LIST_OF_PARENTS)
 CONNECT BY NOCYCLE  PARENT_ID = PRIOR CHILD_ID