我有一个树结构,我需要用两个表来定义,从叶对象开始,叶子对象所在的文件夹路径。
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"被送入递归的下一次迭代。
这样做了足够多次,我得到了一个由每个文件夹名称组成的路径,从叶子对象返回到根文件夹。
但同样,我希望在单个查询中递归执行此操作...