2017-10-27 7 views
0

この次のようなクエリを見つけてください。 私は春データjpaで書いたこの質問。だからそれはすべてのリレーショナルデータベース上で動作するはずですが、私はMsSQLサーバとのMySQLで例外が発生します。SpringデータJPAクエリがMsSQLサーバーで機能していない

@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] --- 

助けてください。

ありがとうございます。

+0

@ PM77-1これはSpring-data-jpaなので、すべてのリレーショナルテーブルで動作するはずです。それがなぜmysqlで動作するのですか?これは私の質問ですので重複しません。 –

+0

私はspring-data-jpaでこの解決策が必要です。これはmysqlとmssqlの両方で動作するはずです。 –

答えて

1

これはSpring Data JPAの問題ではありません。あなたは、SQL標準の一部ではないのMySQLの特定の機能を使用している:

10.6 General Rules for the GROUP BY Clause

選択ブロックは、GROUP BY句を持っている場合は、SELECT句で指定した任意の列仕様は、排他的として行われなければなりません集計された関数のパラメータ、またはGROUP BY句で指定された列のリスト、またはその両方のパラメータ。

あなたのクエリは、一般的に、これは無効なSQLでのみ

group by p.ct" 

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

を持っています。そのため、他の多くのデータベース(MySQLを除く)が例外をスローします。

group by句に列を追加するか、代わりに列の集約関数を使用してください。

+0

こんにちは、ありがとうございます。グループを削除する必要がありますか? –

+0

あなたは上記の質問で解決すべきことを私に教えてくれますか? –

+0

私はそれを得ました、あなたは私が大丈夫にまとめる必要があるという意味ですか? –

関連する問題