解決ONLY_FULL_GROUP_BY的問題

報錯 在mysql 5.7版本下可能會報如下錯誤

Error Code: 1055. Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column ‘×××’ which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

原因 是在5.7下mysql的model默認爲

ONLY_FULL_GROUP_BY

含義 sql中select後面的字段必須出現在group by後面,或者被聚合函數包裹,不然會拋出上面的錯誤 如以下sql

select A.column1, A.column2 from table as A group by column1 //會因爲ONLY_FULL_GROUP_BY的緣故拋出上面錯誤
1
問題解決
思路一
既然是這個模式限制的問題 我們可以修改該模式,找到配置文件 修改配置即可。

vim /etc/mysql/my.cnf
1
文件名如上所示,但是地址可能得看具體環境了

[mysql]
#設置mysql客戶端默認字符集
default-character-set=utf8 
[mysqld]
#設置3306端口
port = 3306
#設置mysql的安裝目錄
basedir=%MYSQL_HOME%
#允許最大連接數
max_connections=200
#服務端使用的字符集默認爲8比特編碼的latin1字符集
character-set-server=utf8
#創建新表時將使用的默認存儲引擎
default-storage-engine=INNODB
#設置模式
sql_mode =STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION

datadir = D:\mysql-5.7.27-winx64\data

注意這裏的sql_mode 是配置在[mysqld]下面的
然後就是重啓mysql服務

思路二
我們得承認這個模式是很有意義的。而我們又想實現如下sql的效果

select A.column1, A.column2 from table as A group by column1

首先我們得理解我們寫的上面的sql的含義 按column1進行分組 那麼結果就是這個組內的cloumn1都是相同的,但是column2卻沒有限制,也就是說可能相同 也可能不同,那麼數據庫不知道column2該返回什麼值給你

那麼我們有兩種方案

在group by後面追加上column2就可以了,意義相當於按照 由column1和column2拼接成的聯合字段進行分組
select A.column1, A.column2 from table as A group by column1 , column2
1
或者在內查詢裏只查詢分組的字段, 各位可以參考如下形式
SELECT A.column1, A.column2 FROM TABLE A JOIN ( SELECT max(id) id, column1 FROM TABLE b GROUP BY column_1 )

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章