トラブルシューティング- 解決のMySQL に含まれていない非ポリマーカラムのGROUP BY 句のエラーの問題を
で:助成金の顧客のQQ :1033553122
テスト環境
win10
MySQLの5.7
問題の説明:
次のようなMySQLのクエリ、
SELECT ID、名前、名前BY case_tableグループからのCNTとしてカウント(*)
エラー、次のように:
服务器内部错误(1055、「SELECTリストの式#1は、GROUP BY句ではなく、GROUP BY句の列に機能的に依存しない非凝集列 『case_table.id』が含まれ、これはsql_modeの= ONLY_FULL_GROUP_BYと互換性がありません」)
理由:非ポリマーカラムIDの存在は、GROUP BY句に含まれていません。
しかし、この場合には、他の場所は、id列を使用する必要があり、それが行うことになって、削除することはできませんか?次のように
ソリューション
方法1
グローバルsql_modeのを照会
GLOBAL.sql_modeをSELECT @@;
若しくは
@@のsql_modeを選択
次のようにクエリ結果は以下のとおりです。
ONLY_FULL_GROUP_BY、STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION ';
SET SESSION
次のようにコピークエリ結果の値が、その後、「ONLY_FULL_GROUP_BY」SESSIONは、クエリの結果を削除sql_model、GLOBAL sql_modeのを設定します。
SET GLOBAL sql_modeの= 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION'。
SETセッションsql_modeの= 'STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION'。
注意:このメソッドは、一時的に変更するために使用されているmysqlの、上記の無効化を再起動してください。
方法2
MySQLを起動すると以下のように、sql_modelのオプションを増やします。
mysqldの--sql_mode = "STRICT_TRANS_TABLES、NO_ZERO_IN_DATE、NO_ZERO_DATE、ERROR_FOR_DIVISION_BY_ZERO、NO_AUTO_CREATE_USER、NO_ENGINE_SUBSTITUTION" [...选项其它]
方法3:
次のようにLinuxサービスの下で、my.conf(Windowsの修飾のmy.ini)を変更し、[mysqldを]ノードの下に、最もsql_modeのは、エンド構成に追加されました:
...
[mysqldを】
...
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
[其它节点配置]
...