最近給公司某系統公衆號端開發新功能,其中涉及到的一個功能點就是要分組查詢每一個強電井最新的一條記錄,考慮到代碼量和代碼的複雜度,我直接使用了 MySQL 中的組內查詢,在本地測試運行程序可行,但當部署到測試服務器時出現了異常,拉取測試服務器日誌出現如下異常:
產生異常的緣由就是所寫組內查詢引發的:java
SELECT a.* FROM tbl_inspection_equipment_record a RIGHT JOIN ( SELECT * FROM tbl_inspection_equipment_record WHERE state = 1 AND build_id = ? ORDER BY end_time DESC ) AS temp ON a.id = temp.id GROUP BY room_id ORDER BY end_time DESC
MySQL 5.7.5及以上功能依賴檢測功能。若是啓用了 ONLY_FULL_GROUP_BY SQL 模式(默認狀況下),MySQL 將拒絕選擇列表,HAVING 條件或 ORDER BY 列表的查詢引用在 GROUP BY 子句中既未命名的非集合列,也不在功能上依賴於它們。(5.7.5以前,MySQL 沒有檢測到功能依賴關係,默認狀況下不啓用 ONLY_FULL_GROUP_BY。有關5.7.5以前的行爲的說明,請參見「MySQL 5.6參考手冊」。)mysql
1 執行sql語句sql
select @@global.sql_mode;
2 執行如下sql語句,去除步驟1中 ONLY_FULL_GROUP_BY
服務器
set @@global.sql_mode = 'STRICT_TRANS_TABLES, NO_ZERO_IN_DATE, NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO, NO_AUTO_CREATE_USER, NO_ENGINE_SUBSTITUTION';
1 遠程服務器找到 my.cnf
文件
2 在該文件的底部加入如下內容:測試
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE, ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
3 重啓mysql服務ui