This question already has answers here:
MySQL GROUP BY doesn't work when migrated to SQL Server 2012
(3个答案)
2年前关闭。
请找到下面的查询。
我用spring数据jpa写了这个查询。因此,它应该可以在所有关系数据库上使用,但是我在MsSQL Server和MySQL上都遇到了异常。
这完全可以在MySQL服务器上使用,但不能在MsSQL服务器上使用。
当我在MsSQL中运行时,它给出了以下异常。
任何帮助,应表示赞赏。
谢谢
仅
通常这是无效的SQL。这就是为什么许多其他数据库(MySQL除外)将引发异常的原因。
将列添加到
(3个答案)
2年前关闭。
请找到下面的查询。
我用spring数据jpa写了这个查询。因此,它应该可以在所有关系数据库上使用,但是我在MsSQL Server和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] ---
任何帮助,应表示赞赏。
谢谢
最佳答案
这不是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
子句中,或改为使用列的聚合函数。关于java - Spring Data JPA查询在MsSQL Server上不起作用,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/46979527/
10-09 17:22