【问题标题】:What is the SQL ANY operator equivalent in JPQL?JPQL 中等效的 SQL ANY 运算符是什么?
【发布时间】:2012-05-15 21:58:29
【问题描述】:

鉴于为 PreparedStatement 准备的以下 Oracle sql 查询:

SELECT *
FROM my_table
WHERE field1 = 'foo'
and field2 =ANY (substr( ? , 1, 2) || '00000000',
                 substr( ? , 1, 4) || '000000',
                 substr( ? , 1, 6) || '0000',
                 substr( ? , 1, 8) || '00',
                 ?
                )

我想翻译成 JPQL 查询。阅读 JPQL 文档,substr 变为 substring ANY 保持原样。在 JPQL 中,ANY 需要一个子查询。

如何将列表更改为子查询?或者我应该使用IN 运算符还是应该生成一个包含一堆 OR 条件的 JPQL 字符串?

Oracle 10gR2
Java 5
JPA 2

【问题讨论】:

    标签: java sql oracle hibernate jpa


    【解决方案1】:

    考虑到= ANY(...)相当于SQL中的IN (...),你可以放心地使用IN。

    事实上,IN 谓词是根据ANY 谓词定义的。 SQL 1992 标准的摘录:

    8.4

    [...]

    <in predicate> ::=
        <row value constructor>
          [ NOT ] IN <in predicate value>
    

    [...]

    2) 令 RVC 为 ,让 IPV 为

    [...]

    4) 表达式

      RVC IN IPV
    

    等价于

      RVC = ANY IPV  
    

    再说一次,ANY / SOME &lt;quantified comparison predicate&gt; 运算符的定义方式类似于一组 OR 连接谓词。因此答案是:您可以同时使用INOR-connected 谓词。

    注意:虽然这个答案解释了它们在 SQL 中的情况,但我很确定类似的东西也适用于 JPQL。

    【讨论】:

    • 感谢您的回复!我将使用 IN 运算符
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 2021-08-09
    • 2012-01-24
    • 1970-01-01
    相关资源
    最近更新 更多