我正在尝试通过使用以下查询来获取特定虚拟文档的子代
select * from dm_document in document ID('virtual document id') descend with any r_version_label='CURRENT'
我能够获取特定虚拟文档的子级,但是我希望通过单个dql查询获得所有虚拟文档的所有子级(仅当前版本)
有人可以通过dql查询帮助我,以获取文档库中存在的所有虚拟文档的所有子元素吗?
虚拟文档的直接和间接组件是什么意思?
更新:我正在使用的查询是
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是否使所有组件都达到了叶级别(最高深度),还是我们必须在查询中使用下降?
如果必须使用降序,那么我们必须在哪里使用降序在dql查询中?
请帮助我。
谢谢。
答案 0 :(得分:1)
此请求的问题在于,可能存在虚拟文档,其子文档由非当前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
在大多数情况下,由于子级将链接到当前版本,因此您在第二和第三列将获得相同的值,但有时您会获得不同的值。 对于第一列和第三列,由于VD的第一个组件是父文档,因此对于某些记录,您还将获得相同的值。 确实,您应该查看dmr_containment对象表并了解这一点以获得所需的输出。
希望这会有所帮助。