【发布时间】: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”输入到递归的下一次迭代中。
这样做足够多次,我会得到一个由每个文件夹名称组成的路径,从叶对象返回到根文件夹。
但同样,我希望在单个查询中递归地执行此操作...
【问题讨论】:
-
感谢@TonyAndrews,您提供的链接帮助我缩小了这方面的差距!