MySQL出出SELECTリストがGROUPBY句にありません。

[タップ]

エラー

実行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 ==

おすすめ

転載: blog.51cto.com/13771903/2595067