MySQL 錯誤:SELECT 清單與SQL_MODE=ONLY_FULL_GROUP_BY 不相容
執行包含SELECT 語句 不相容
執行包含SELECT 陳述式句時,MySQL 可能會回傳錯誤,表示該表達式不在GROUP BY子句中。當 SQL_MODE 設定為 ONLY_FULL_GROUP_BY 時,可能會發生這種情況,這要求 SELECT 清單中的所有非聚合資料列都包含在 GROUP BY 子句中。
解決方案1:停用SQL_MODE=ONLY_FULL_GROUP_BY
SET GLOBAL sql_mode=(SELECT REPLACE(@@sql_mode,'ONLY_FULL_GROUP_BY',''));
一個解決方案是停用透過發出下列指令來設定SQL_MODE=ONLY_FULL_ROROUP_BY:
解決方案 2:在 GROUP 中包含所有非聚合列BY 子句
另一個解決方案是包含所有GROUP BY 子句中的非聚合列。這可以透過修改查詢以包含以下內容來完成:
SELECT * FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`, `id`
這將確保所有非聚合列都包含在 GROUP BY 子句中,並且查詢執行時不會出現錯誤。
解決方案3:使用聚合器函數
為了獲得最佳實踐,請考慮使用用於非聚合列的聚合器函數,而不是選擇所有列。例如,如果您只需要每種證明類型的記錄數,則可以如下修改查詢:
SELECT `proof_type`, COUNT(*) AS `total_records` FROM `tbl_customer_pod_uploads` WHERE `load_id` = '78' AND `status` = 'Active' GROUP BY `proof_type`
以上是如何解決 MySQL 錯誤:SELECT 清單與 SQL_MODE=ONLY_FULL_GROUP_BY 不相容?的詳細內容。更多資訊請關注PHP中文網其他相關文章!