在dql子查询中只选择一行

时间:2014-04-23 15:47:20

标签: subquery dql documentum

我必须执行以下查询:

create dm_myobject object
set my_id_attribute = (select r_object_id from dm_otherobject where <some clause here>)
where ...

但是括号中的子查询返回多个id。我不能使whereclause更详细,只检索一个值。 怎么先拿?

ENABLE(FETCH_ALL_RESULTS 1) or ENABLE(RETURN_TOP 1)没有帮助。

1 个答案:

答案 0 :(得分:2)

根据我的经验,不可能像你建议的那样在子查询中使用DQL提示,因为提示作为一个整体应用于查询。确实可以在包含子查询的查询上使用ENABLE(RETURN_TOP 1),但是该提示随后将用于外部查询,而不会用于内部查询。但是,在您的情况下,您最终会收到一条错误消息,告知子查询返回多个结果。

尝试在所选属性上使用聚合函数

CREATE dm_myobject OBJECT
SET my_id_attribute = (
    SELECT MIN(r_object_id)
    FROM dm_otherobject
    WHERE <some clause>
)

MIN和MAX函数使用整数和字符串,我怀疑它们也可以使用ID。由于您可以只设置从子查询返回的第一个ID,我怀疑您是按照排序顺序返回它们并想要使用第一个 - 因此使用MIN功能

另一种方法当然是编写一个脚本或一个执行多个DQL语句的小型Java程序,但在您的情况下可能会或可能不适合您。