2

我正在尝试使用下面的查询来获取特定虚拟文档的子级

select * from dm_document in document ID('virtual document id') descend with any r_version_label='CURRENT' 

我能够获取特定虚拟文档的子项,但我希望通过单个 dql 查询获得所有虚拟文档的所有子项(仅当前版本)

任何人都可以帮助我进行 dql 查询以获取 docbase 中存在的所有虚拟文档的所有子文档吗?

而且,虚拟文档的直接和间接组成部分是什么意思?

更新:我正在使用的查询是

select e.*,C.r_object_id as folder_id,C.r_folder_path from dm_folder_r C,
(
select A.*,A.i_folder_id from dm_document A,
(
 SELECT r_object_id,object_name FROM dm_document 
     WHERE i_chronicle_id 
    IN (select component_id,version_label from dmr_containment where parent_id in (select r_object_id from dm_document where r_is_virtual_doc=1 or r_link_cnt>0))
   )d 
where d.r_object_id=A.r_object_id 
)e where e.i_folder_id=C.r_object_id and C.r_folder_path is not null  

如果虚拟文档中的组件也是虚拟文档(嵌套虚拟文档),dmr_containment 是否给出嵌套虚拟文档的组件?我的意思是 dmr_containment 是否将所有组件提供到叶级别(最高深度)或者我们必须在查询中使用下降?

如果我们必须使用descend,那么我们必须在我正在使用的dql查询中在哪里包含descend?

请帮我。

提前致谢。

4

1 回答 1

2

此请求的问题在于,可能存在具有非当前 ID 引用的子项的虚拟文档。但是你仍然可以得到列表...

试试这个:

SELECT 
  pa.r_object_id, ch.r_object_id, cu.r_object_id
FROM
  dm_document pa,
  dm_document (ALL) ch ,
  dm_document cu,
  dmr_containment r
WHERE
  pa.r_is_virtual_doc = 1
  and r.parent_id = pa.r_object_id
  and r.component_id = ch.r_object_id
  and cu.i_chronicle_id = ch.i_chronicle_id

在大多数情况下,您将在第 2 列和第 3 列获得相同的值,因为子项将链接到当前版本,但有时您可以获得不同的值。对于第 1 列和第 3 列,由于 VD 的第一个组件是父文档,因此您还将获得某些记录的相同值。实际上,您应该查看 dmr_containment 对象表并了解这一点以获得所需的输出。

希望这可以帮助。

于 2018-06-21T12:01:27.050 回答