【问题标题】:Spring Data JPA Query Not Working On MsSQL Server [duplicate]Spring Data JPA查询在MsSQL Server上不起作用[重复]
【发布时间】:2017-10-27 16:21:24
【问题描述】:

请找到以下查询。 我用spring data jpa编写的这个查询。所以它应该适用于所有关系数据库,但我在 MsSQL 服务器上遇到异常,在 MySQL 中它工作正常。

@Query(value = "SELECT p.ct,p.ctc,p.fy,"
            + " sum(p.oA + p.nA) as a,p.py "
            + " FROM P p where p.py = :py AND p.fy = :fy "
            + " AND p.B.eId in (SELECT eId FROM B WHERE o.oId in ( :oIds ) ) group by p.ct")
    List<?> test(@Param("py")String py,@Param("fy") Integer fy,@Param("oIds")List<Integer> oIds);

这完全适用于 MySQL 服务器,但不适用于 MsSQL 服务器。

当我在 MsSQL 中运行时,它给出了以下异常。

SqlExceptionHelper: Column 'tbl.ctc' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.
[2017-10-27 09:38:38.108] boot - 83734 ERROR [http-bio-8080-exec-1] --- 

任何帮助都应该感激。

谢谢

【问题讨论】:

  • @PM77-1 这是一个 Spring-data-jpa ,所以它应该适用于所有关系表。那么为什么它适用于 mysql 这是我的问题,所以它不是重复的。
  • 我在 spring-data-jpa 上需要这个解决方案,这应该适用于 mysql 和 mssql。

标签: java mysql sql-server jpa spring-data-jpa


【解决方案1】:

这不是 Spring Data JPA 的问题。您正在使用不属于 SQL 标准的 MySQL 的特定功能:

10.6 General Rules for the GROUP BY Clause

如果选择块确实有 GROUP BY 子句,则在 SELECT 子句中指定的任何列规范必须仅作为聚合函数的参数或在 GROUP BY 子句中给出的列列表中出现,或同时出现在两者中。

您的查询有

SELECT p.ct, p.ctc, p.fy, p.pt

只有

group by p.ct"

通常这是无效的 SQL。这就是为什么许多其他数据库(除了 MySQL)会抛出异常的原因。

要么在group by 子句中添加列,要么使用列的聚合函数。

【讨论】:

  • 您好,感谢您的回复。所以你的意思是需要删除 group by ?
  • 你能告诉我在上面的查询中我应该改变什么以获得解决方案吗?
  • 好的,我明白了,你的意思是我需要分组好吗?
  • 更改可能会影响您的查询结果。所以你必须根据你的要求进行更新。
  • 可能是group by p.costType, p.costTypeCode, p.fiscalYear, p.phaseType。或者相反SELECT p.costType, max(p.costTypeCode), min(p.fiscalYear), max(p.phaseType)
猜你喜欢
  • 2016-08-26
  • 2017-10-24
  • 2016-10-10
  • 2018-01-27
  • 2018-07-05
  • 2013-12-10
  • 1970-01-01
  • 1970-01-01
  • 2017-09-21
相关资源
最近更新 更多