【问题标题】:ATG RQL query like SQL 'property in (x, y, z)'ATG RQL 查询,如 SQL '(x, y, z) 中的属性'
【发布时间】:2013-12-26 10:00:19
【问题描述】:

我正在尝试编写一个与此 sql 等效的 RQL 查询:

select * from some_table t where t.property in (1, 2, 3, 4 ...)

我不确定 RQL 是否支持这一点。在 oracle 文档中,有一个如何在存储库项的 ID 属性上执行此操作的示例:

ID IN { "0002421", "0002219", "0003244" ... }

但是当我尝试将本示例中的 ID 更改为我想要查询的属性时,我得到了 RQL ParseException。

有人知道这是否可行吗?

【问题讨论】:

    标签: sql atg


    【解决方案1】:

    这可以通过 querybuilder api 实现(参见下面的示例)。我不确定为什么这不能通过普通的 RQL 获得。

    QueryExpression thePropertyExpression =     
       theQueryBuilder.createPropertyQueryExpression("postalCode");
    
    String [] zipcodeArray = {"22185", "22183"};
    
    QueryExpression theValueExpression = 
        theQueryBuilder.createConstantQueryExpression(zipcodeArray);
    
    Query theQuery = 
        theQueryBuilder.createIncludesQuery(theValueExpression, thePropertyExpression);
    

    【讨论】:

    • @rcgeorge23 ​​可能是因为格式不正确。
    • 对不起,我是这里的新手,这是我在stackoverflow中的第一个答案。
    • @Vihung,我不明白你的意思。你能解释一下吗?
    【解决方案2】:

    radimpe 的答案是正确的,并且直接来自 oracle 文档。您可以根据您的要求执行 INCLUDES ANY 查询。它适用于字符串。例如。如果您正在搜索名字为 Alex 或 Brian 的用户,您可以使用 RQL 编写:

    firstName INCLUDES ANY {"Alex","Brian"}
    

    链接在这里: http://docs.oracle.com/cd/E24152_01/Platform.10-1/ATGRepositoryGuide/html/s0305multivaluedpropertyqueries01.html

    【讨论】:

    • 该示例未出现在您提供的链接中。该页面上的所有示例都对集合进行操作。从页面顶部的段落“可以将另一组查询应用于数组或标量值集合 - 例如,int [] 类型的属性或字符串集”。 INCLUDES 不会执行您在示例中显示的操作。
    • 糟糕,抱歉,这是我的错误。它真的不是那样搜索..只有多值(我通过 dyn admin 尝试过)。我也没有在 RQL 中找到任何可以做到这一点的东西。如果您以编程方式执行此操作,则可能需要使用 sqlpassthrough(参数化)。
    • 包括任何仅适用于列表或数组的属性
    【解决方案3】:

    ATG Documentation 开始,RQL 语法包含一个针对ID IN 的特定比较查询,因此将ID 更改为另一个属性将无法正确解析,因此您的ParseException

    进一步查看语法文档,您会发现ComparisonOperator。特别感兴趣的是INCLUDES ANY

    一个关于它使用的例子(from the docs)

    兴趣包括任何{“骑自行车”、“游泳”}

    这相当于:

    (兴趣包括“骑自行车”)或(兴趣包括“游泳”)

    所以这可能有效,只要您搜索标量属性。

    所以这给你留下了最后一个选项,你可能试图避免创建一个大的OR 条件,这是我通常会这样做的方式,因为你必须通过一个循环无论如何都要建立你的IN 声明。

    【讨论】:

    • 感谢您的回答,虽然我认为 INCLUDES 仅用于收藏。我要查询的属性不是一个集合——我确实尝试使用 INCLUDES,但我遇到了另一个语法错误。是的,我试图避免使用大的 (property='x' or property='y' ...) 子句,但我认为这可能是唯一的选择。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-01-12
    • 2019-09-29
    • 1970-01-01
    • 2019-06-26
    • 1970-01-01
    • 2013-02-26
    • 2012-05-27
    相关资源
    最近更新 更多