使用两个表的递归查询?

时间:2015-08-07 01:05:03

标签: recursion oracle11g

我有一个树结构,我需要用两个表来定义,从叶对象开始,叶子对象所在的文件夹路径。

FOLDER_DETAILS包含对象和文件夹详细信息,FOLDER_HIERARCHY包含文件夹及其父文件夹关联(如果有)。

每个叶子对象可以是1个文件夹级别深度,或者它可以是100个文件夹级别深度。

目前,我使用递归C#代码执行每级查询,这感觉很昂贵,而且与我与数据库的连接绝对耗时。我想知道是否有办法通过单个递归查询来实现这一点?

目前的方法:

因为我已经开始知道叶对象的这个过程,所以我很容易得到它的OBJECT_ID和OWNER_ID值。叶对象的OWNER_ID值是叶文件夹的id。

从那里,我执行的查询的基本概要是:

SELECT FD.FOLDER_NAME, FD.FOLDER_ID, FH.OWNER_ID 
FROM FOLDER_DETAILS FD 
     INNER JOIN FOLDER_HIERARCHY FH ON FD.FOLDER_ID = FH.ID
WHERE FD.OBJECT_ID = :object_id 
AND FH.OWNER_ID = :owner_id;

我从每个查询中收集了" FOLDER_NAME" value作为该级别的文件夹名称,以及" FOLDER_ID" (成为OBJECT_ID)和" OWNER_ID"被送入递归的下一次迭代。

这样做了足够多次,我得到了一个由每个文件夹名称组成的路径,从叶子对象返回到根文件夹。

但同样,我希望在单个查询中递归执行此操作...

1 个答案:

答案 0 :(得分:0)

@TonyAndrews提供的链接是解决方案。 hierarchical (aka "connected by") query