1.問題の原因
MySQLの8.0.17バージョンで次のSQL文を実行し、エラーを報告 Error 1055
select Host,Select_priv,user,COUNT(*)
FROM user
GROUP BY Select_priv,Host;
エラーメッセージ:
Error 1055 - Expression #1 of SELECT list is not in GROUP BY clause
and contains nonaggregated column 'mysql.user.Host' which
is not functionally dependent on columns in GROUP BY
clause; this is incompatible with sql_mode=only_full_group_by
間違った視点からの情報は、主にsql_mode = only_full_group_by
関連します。モードONLY_FULL_GROUP_BY 5.7バージョンがデフォルトで有効にされた後にこれは、バージョン5.7以上のMySQLの新機能によって、グループで
ONLY_FUll_GROUP_BY 模式
:
- 重合のためのGROUP BY操作、フィールドがGROUP BYステートメントではないため、フィールドには、これは正当ではないGROUP BY、SQLのSELECTに表示されていない場合。実際には、そのチェックアウトフィールドがフィールドに表示されGROUP BYの後のフィールド、または集約関数のセットに含まれている必要があります
2.ソリューション
-
第1の接続端子がグローバルsql_modeのを表示するには、次のコマンドを使用して、MySQLを入力するには、次のテーマを参照してください
SELECT @@GLOBAL.sql_mode;
-
主がここでコマンドによって修飾SQL_MODE、
ONLY_FUll_GROUP_BY
除去および再配置されていますset @@GLOBAL.sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
-
sql_modeの設定を見直し、成功した変更を確認
SELECT @@GLOBAL.sql_mode;
-
マックの下でMySQLサービスを再起動し
mysql.server restart
3.まとめ
デフォルトのオープン、なぜ実際には、厳密に言えば、MySQLの理由ONLY_FUll_GROUP_BY
モードがエラーを低減することもあります。探しているときではないので、フィールドを選択GROUP BY
重合フィールド、屈折率変化やオプティマイザが異なる結果を返すことが異なる最適化戦略を選択する際に、決定されていないデータのフィールドをチェックしてください。この例の後、sql_modeのは、データベースを変更、クエリステートメントが正常に実行結果は以下の通りであるされています。全体のテーマデータ表から分かるように、フィールド条件の変更が4つの異なる値があるが、最初の2つの問合せの結果、GROUP BYを使用し、実際にユーザフィールドは、また、障害の原因となる、平均後の他の値に見出すことができます
select Host,Select_priv,user,COUNT(*)
FROM user
GROUP BY Select_priv,Host;