【问题标题】:JPQL query with having oracle db具有 oracle db 的 JPQL 查询
【发布时间】:2018-12-21 10:41:12
【问题描述】:

我正在使用 jpql jpa eclipselink 以下查询不起作用:

SELECT c FROM TableA c WHERE c.forumId = :forumId AND c.isDefault = true HAVING MAX (c.validFrom)

我得到“表达式不是有效的条件表达式”的错误

【问题讨论】:

  • 因为 HAVING 子句必须是布尔/条件表达式,所以它是完全正确的。为什么不修复您的查询以使 HAVING 成为布尔值...datanucleus.org:15080/products/accessplatform_5_2/jpa/…
  • 但我想获得最大有效来自我怎样才能表达这个?
  • 好的,不需要最大值,只需按 valdFom DESC 限制 1 排序

标签: oracle jpa eclipselink jpql


【解决方案1】:

带有GROUP BY 表达式的HAVING 子句only works。

HAVING 子句允许过滤 GROUP BY 的结果。

你的问题是:

我想获得最大有效从我如何表达这个

但是您可以在没有GROUP BY 和HAVING 的情况下进行查询以执行您想要的操作:

select c from TableA c WHERE c.validFrom = (
    SELECT MAX(c2.validFrom) 
    FROM TableA c2  
    WHERE c2.Id = c.Id AND c.forumId = :forumId AND c.isDefault = true
)

如果你想使用GROUP BY和HAVING,你可以这样做:

SELECT c FROM TableA c WHERE c.validFROM = (
    SELECT MAX(validFROM) 
        FROM TableA 
        WHERE forumId = :forumId AND isDefault = true
        GROUP BY validFROM
        HAVING validFROM=c.validFROM
)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-06
    • 2011-06-12
    • 2021-10-21
    • 2010-12-09
    • 2012-09-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多