【问题标题】:Recursive query using two tables?使用两个表的递归查询?
【发布时间】:2015-09-09 15:42:55
【问题描述】:

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

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”值作为该级别的文件夹名称,并将“FOLDER_ID”(成为 OBJECT_ID)和“OWNER_ID”输入到递归的下一次迭代中。

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

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

【问题讨论】:

标签: recursion oracle11g


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-10-22
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多