解決 MySQL Error Code: 1055 和 Error Code: 1140 報錯

最後更新於 2021 年 6 月 11 日

當我們今天使用 GROUP BY指令時可能遇到這個問題:

SELECT * FROM exdb.table GROUP BY id ;
Error Code: 1055. 
Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'exdb.table.id' which is not functionally dependent on columns in GROUP BY clause; 
this is incompatible with sql_mode=only_full_group_by

意思是說:對於 GROUP BY 聚合操作,如果在 SELECT 中的列,沒有在 GROUP BY 中出現,那麼這個 SQL 是不合法的。

也就是說,當我們今天想要依照 學號 分組,但同時我們也需要知道該學號對應的學生姓名,就會引發這個錯誤。這個錯誤和 only_full_group_by 有關,是MySQL 5.7 GROUP BY的新特性,默認是為開啟,因此我們需要將它刪除掉。

還有另一種情況:SELECT 的欄位並沒有 GROUP BY 聚合引發的錯誤也可以用同樣的方式解決。

Error Code: 1140. 
In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'exdb.table.id'; 
this is incompatible with sql_mode=only_full_group_by

解決辦法

輸入下方指令:

SELECT @@SESSION.sql_mode;

我們可以查看到當前 sql_mode

'ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'
se1 解決 MySQL Error Code: 1055 和 Error Code: 1140 報錯

我們將之複製起來,刪除掉 ONLY_FULL_GROUP_BY, 的部分,輸入下方指令重新設置 sql_mode 即可:

SET sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
se2 解決 MySQL Error Code: 1055 和 Error Code: 1140 報錯
0 0 評分數
Article Rating
訂閱
通知
guest

0 Comments
在線反饋
查看所有評論