高版本Mysql使用group by分組報錯的解決方案
Mysql5.7版本以上對group by 分組有瞭新需求,要求group by 後的字段要與select後查詢的字段一致,否則就會報錯,報錯信息如下:
#1055 – Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘id’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
通過報錯分析是由於group by 後的分組字段與查詢字段不一致導致。
解決方案:
方法一:補全group by 後字段(不推薦這種方法,有時要查詢的字段很多而且字段的內容不能保證不重復,如果全部補齊會造成查詢數據丟失)。
方法二:修改配置
1)使用navicat管理工具連接mysql數據庫
打開navicat管理工具,按F6打開命令界面,依次輸入以下語句
select @@global.sql_mode;
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';`
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
截圖如下:
再重新執行就會發現不再報錯。
2)使用cmd命令行更改
按win+r打開運行界面,輸入cmd打開命令行界面
打開後切換目錄到mysql安裝包的bin目錄下,具體操作如下圖(根據自己路徑切換)
連接數據庫,輸入mysql -u root -p,按回車再輸入數據庫密碼
連接成功後再依次輸入以下語句
select @@global.sql_mode;
set global sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
set session sql_mode='STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION';
截圖如下:
至此配置結束
總結
到此這篇關於高版本Mysql使用group by分組報錯的解決方案的文章就介紹到這瞭,更多相關Mysql使用group by分組報錯內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- sql模式設置引起的問題解決辦法
- MySQL運行報錯:“Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggre”解決方法
- MySQL 5.7之關於SQL_MODE的設置
- 解決docker修改mysql配置文件的問題
- MySQL sql_mode修改不生效的原因及解決