1. 程式人生 > >mysql查詢出現In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';

mysql查詢出現In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'zhibo.a.id';

出現問題:

Error querying database.  Cause: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: In aggregated query without GROUP BY,expression #2 of SELECT list contains nonaggregated column 'pay.t.type'; this is incompatible with sql_mode=only_full_group_by

出現原因:

在MySQL5.7.5後,預設開啟了ONLY_FULL_GROUP_BY,所以導致了之前的一些SQL無法正常執行,其實,是我們的SQL不規範造成的,因為group by 之後,返回的一些資料是不確定的,所以才會出現這個錯誤。

解決方案:

1.修改SQL,因為出現這個問題,基本都是因為這個問題造成的,不確定返回欄位可以使用ANY_VALUE(column_name)。

2.關閉ONLY_FULL_GROUP_BY,我的是Linux環境,我就說一下Linux的解決步驟:

  ①、登入進入MySQL,linux登入的:mysql -u username -p ,然後輸入密碼,輸入SQL:show variables like '%sql_mode';

  

  ②、編輯my.cnf檔案,檔案地址一般在:/etc/my.cnf,/etc/mysql/my.cnf,

    找到sql-mode的位置,去掉ONLY_FULL_GROUP_BY,然後重啟MySQL;有的my.cnf中沒有sql-mode,需要加入:

    sql-mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION,

    注意要加入到[mysqld]下面,我就是加入到其他地方,重啟後也不生效,具體的如下圖:

  

  ③、修改成功後重啟MySQL服務,service mysql restart,重啟好後,再登入mysql,

    輸入SQL:show variables like '%sql_mode'; 如果沒有ONLY_FULL_GROUP_BY,就說明已經成功了。