【问题标题】:Convert this JPQL query to SQL query将此 JPQL 查询转换为 SQL 查询
【发布时间】:2021-10-09 06:44:09
【问题描述】:
SELECT
        depart_id
    FROM
        department
    GROUP BY
        depart_id
    HAVING
        SUM(emp_id IN ('emp1', 'emp2'))

# depart_id emp_id
1a  emp1
1a  emp2
1a  emp3
1a  emp2
2b  emp1

这里的问题是抛出异常 antlr.MismatchedTokenException: Expecting CLOSE, found 'in'

【问题讨论】:

  • 请通过包含示例 input 表/实体数据,使这个问题成为一个完整的问题。然后向我们展示您想要的确切 输出,并解释您当前的 SQL 查询应该做什么。
  • 表结构是有问题的,不要在意结果,只希望在将提到的查询从 jpql 转换为 sql 时没有编译错误。这部分查询抛出异常SUM(emp_id IN ('emp1', 'emp2'))
  • from jpql to sql ...您的标题说您想从 SQL 转换为 JPQL。这个问题不清楚。
  • 抱歉标题错误,现已更新。

标签: mysql sql jpql


【解决方案1】:

首先,我认为您编写的查询中有错误:

select depart_id from department group by depart_id having sum(emp_id) in ('emp1', 'emp2');

SUM 需要关闭,然后将 IN 应用于此总和的结果。

可以在here 找到有关 CriteriaBuilder 和 JPQL 的一些帮助。

【讨论】:

  • 首先这不起作用,其次通过从 SUM(emp_id IN ('emp1', 'emp2')) 更改为 sum(emp_id) in ('emp1', 'emp2') 将更改整个结果。因为在此 SUM(emp_id IN ('emp1', 'emp2')) 中,我们首先提取位于 ('emp1', 'emp2') 下的 emp_id 然后进行求和,但在您的查询中我们首先进行emp_id 的总和,然后检查 ('emp1', 'emp2') 中的那些,这甚至是不可能的。
  • Ok ... 然后将 emp_id IN ('emp1', 'emp2') 广告到 WHERE 条件。并且查询将只返回此条件为“真”的行。如果您想为特定部门选择行数,只需选择 COUNT(*)。
  • 我无法更改查询结构,因为这将更改查询结果,并且根据 JPQL 文档,子查询可以在 WHERE 或 HAVING 子句中使用,请检查此链接 docs.oracle.com/html/E13946_04/…。但我不确定聚合超过聚合是否合法。
  • 好的,SUM 是干什么用的?你想选择emp的计数吗?或者它有什么用?可能是当您提供类似预期结果的东西时,有人可以在这里为您提供帮助...
  • 这是一个非常复杂的查询,它首先检查在这种情况下 emp1 和 emp2 有多少 emp id 与给定的 id 匹配,然后对它进行求和,因此使用 count 你会得到 3 和 2 但使用 sum 你会只得到 2 个。
猜你喜欢
  • 2011-06-12
  • 2013-09-17
  • 2011-07-05
  • 2011-09-29
  • 2014-01-17
  • 2017-10-29
  • 2019-07-13
  • 1970-01-01
  • 2011-03-25
相关资源
最近更新 更多