出現錯誤:
which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
SQL的grop by 語法為,
select 選取分組中的列+聚合函數 from 表名稱 group by 分組的列
從語法格式來看,是先有分組,再確定檢索的列,檢索的列只能在參加分組的列中選。
所以問題中的,group by 后的 a,b,c是先確定的。select后的a,b,c才是可以變的。即
以下語句都是正確的:
select a,b,c from table_name group by a,b,c,d; select a,b from table_name group by a,b,c; select a,max(a) from table_name group by a,b,c;
以下語句則是錯誤的:
select a,b,c from table_name group by a,b; select a,b,c from table_name group by a;
一:在sql查詢語句中不需要group by的字段上使用any_value()函數
這種對於已經開發了不少功能的項目不太合適,畢竟要把原來的sql都給修改一遍
二:修改my.cnf(windows下是my.ini)配置文件,刪掉only_full_group_by這一項
若我們項目的mysql安裝在ubuntu上面,找到這個文件打開一看,里面並沒有sql_mode這一配置項,想刪都沒得刪。
當然,還有別的辦法,打開mysql命令行,執行命令
1
|
select @@sql_mode;
|
這樣就可以查出sql_mode的值,復制這個值,在my.cnf中添加配置項(把查詢到的值刪掉only_full_group_by這個選項,其他的都復制過去):
1
|
sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION;
|
如果 [mysqld] 這行被注釋掉的話記得要打開注釋。然后重重啟mysql服務
注:使用命令
1
|
set sql_mode=STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
|
這樣可以修改一個會話中的配置項,在其他會話中是不生效的。