【问题标题】:Select only one row in dql subquery在 dql 子查询中只选择一行
【发布时间】:2014-04-23 15:47:20
【问题描述】:

我必须执行以下查询:

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) 没有帮助。

【问题讨论】:

  • Yegoshin Maxim - 这是一个很好的问题!我事先不知道答案,不得不进行相当多的实验。一个非常好的挑战。谢谢! :)

标签: subquery dql documentum


【解决方案1】:

根据我的经验,不可能像您建议的那样在子查询中使用 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 函数。

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

【讨论】:

    猜你喜欢
    • 2016-02-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-25
    • 1970-01-01
    • 2013-01-02
    相关资源
    最近更新 更多