MySQL 5.7 執行SQL報錯:1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column 的解決辦法


背景

項目中的MySQL服務器一直使用的公司內網測試服務器,前幾天內網測試服務器出問題了,MySQL掛了不能提供服務,所以在本機安裝了MySQL5.7.20版本(通過解壓官網下載的壓縮包並使用命令來安裝的方式)。

項目跑起來,有些功能使用不了,查了原因,是因為執行下面的SQL報異常了:

SELECT
    rd.EQU_CD AS EQUCD,
    rd.EQU_TYPE AS EQUTYPE,
    DATE_FORMAT( rd.TM, '%Y-%m-%d' ) AS tm,
    sum( rd.ACCW ) ACCW 
FROM
    t_receivedata rd
    INNER JOIN ( SELECT ENG_MAN_CD, EQU_CD, EQU_TYPE FROM t_monitor GROUP BY ENG_MAN_CD, EQU_CD ) mt ON rd.EQU_CD = mt.EQU_CD 
WHERE
    mt.ENG_MAN_CD IS NOT NULL 
    AND mt.EQU_TYPE IS NOT NULL 
    AND YEAR ( rd.TM ) = 2019 
    AND MONTH ( rd.TM ) = 12 
GROUP BY
    DATE_FORMAT( rd.TM, '%Y-%m-%d' ),
    rd.EQU_TYPE 
ORDER BY
    TM ASC;

異常信息如下:

1055 - Expression #3 of SELECT list is not in GROUP BY clause and contains nonaggregated column

原因

MySQL 5.7.5 及以上功能依賴檢測功能。如果啟用了ONLY_FULL_GROUP_BY SQL 模式(默認情況下),MySQL將拒絕選擇列表,HAVING 條件或 ORDER BY 列表的查詢引用在 GROUP BY 子句中既未命名的非集合列,也不在功能上依賴於它們。(5.7.5之前,

MySQL沒有檢測到功能依賴關系,默認情況下不啟用ONLY_FULL_GROUP_BY。)

解決

以Windows操作系統為例,編輯 MySQL配置文件 my.ini,在尾部添加以下內容,重新啟動 MySQL 即可:

[mysqld] 
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION

注意:如果你的my.ini文件中已經存在[mysqld]這行,就無需再添加了,只需要在[mysqld]下面添加sql_mode...這一行就行了。

參考

https://blog.csdn.net/yuanlaijike/article/details/87926596

 


免責聲明!

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



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