[タップ]
エラー
実行SQLエラーは次のとおりです。
SELECT student.s_no,student.s_name,SUM(result.mark) FROM student,result WHERE student.s_no=result.s_no GROUP BY student.s_no
> 1055 - Expression #2 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'db_ketest.student.s_name' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
> 时间: 0.081s
理由
MySQL 5.7.5以降には、依存関係検出機能があります。ONLY_FULL_GROUP_BY SQLモードが有効になっている(デフォルトで有効になっている)場合、MySQLは、GROUP BY句で名前が付けられておらず、それらに機能的に依存していない非集計列を参照する選択リスト、HAVING条件、またはORDERBYリストクエリを拒否します。(5.7.5より前は、MySQLは機能の依存関係を検出せず、ONLY_FULL_GROUP_BYはデフォルトで有効になっていませんでした。)
解決
方法1:
コマンドラインまたはデータベースクライアントを使用してSQL
1.SQLステートメントを実行し、@@ global.sql_modeクエリを選択しますmysql> select @@global.sql_mode; +-------------------------------------------------------------------------------------------------------------------------------------------+ | @@global.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 | +-------------------------------------------------------------------------------------------------------------------------------------------+ 1 row in set (0.06 sec)
2. ONLY_FULL_GROUP_BYを削除し、値をリセットします
mysql> 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';
方法
2viMySQL構成ファイルmy.cnfを変更する[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
構成ファイルを保存して、MySQLサービスを再起動します。servicemysqlrestart
== End ==