Error Code: 1055.Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'userinfo.


環境:mysql-8.0.15-winx64

問題描述:

Error querying database.  Cause: java.sql.SQLSyntaxErrorException: Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'tt.from_id' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

關於葉神的頭條資訊網站項目,自己在練習時,寫了一個站內信,卻一直獲取站內信列表失敗。前后對照代碼都沒錯,很是急人!然后用MySQL workbench圖示化出來發現,在寫以下SQL語句時就出現了錯誤。對照着IDEA上的出錯警示(下圖1所示)

SELECT * FROM message group by conversation_id;

圖1. IDEA上的出錯警示

果然是DAO層的SQL語句出現了問題。但是我回過頭來看,再三檢查,發現明明沒有問題呢【黑人問號臉】,於是百度搜索,發現真有不少相關的問題。

原來代碼沒錯,是數據庫的sql_mode出了問題。

參照參考2中解釋【真心詳細】,SQL模式默認情況下是only_full_group_by ,MySQL就會拒絕選擇列表、條件或順序列表引用的查詢,這些查詢將引用組中未命名的非聚合列,而不是在功能上依賴於它們。

為了一探究竟,於是乎,先后照着執行以下命令:

SHOW SESSION VARIABLES;
SHOW GLOBAL VARIABLES;
select @@sql_mode;

可見:session和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

按照參考2中解決辦法操作時,在命令行發現出現了問題

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';

發現提示sql_mode不能被賦值為NO_AUTO_CREATE_USER,操作了一下set session sql_mode,也是同樣的問題。

於是乎,那不行就不行唄,將NO_AUTO_CREATE_USER刪去了,再次賦值。果然成功!

正確執行命令是:

set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
mysql> set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';

這兩個命令是去掉 sql_mode 的 ONLY_FULL_GROUP_BY模式的。故有效果。

 另外,我還試了參考1中的辦法,就是高贊的答案,執行如下:

SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));

然后發現也是不行,所以建議大家還是采用參考2中的方法吧!

 

參考:

1. https://stackoverflow.com/questions/41887460/select-list-is-not-in-group-by-clause-and-contains-nonaggregated-column-inc

2. 極力推薦:https://blog.csdn.net/fansili/article/details/78664267

3. http://blog.sina.com.cn/s/blog_3eba8f1c0102x75o.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM