MySQL中的ONLY_FULL_GROUP_BY是一個SQL_MODE,用于在使用GROUP BY時進行更嚴格的檢查。只有在SELECT的列表中出現的聚合函數和GROUP BY的列才能出現在查詢結果中。如果任何其他列出現在查詢結果中,則會得到錯誤。
SET sql_mode = 'ONLY_FULL_GROUP_BY'; SELECT customer_id, MAX(order_date), order_total FROM orders GROUP BY customer_id;
上面的代碼將在查詢之前將SQL_MODE設置為ONLY_FULL_GROUP_BY。查詢將只返回每個客戶的最大訂單日期和訂單總金額,并且將按客戶分組,以確保頁面上僅顯示唯一的客戶。這樣,我們可以做到嚴格檢查與分組有關的列。
MySQL 5.7.5及更高版本中默認啟用ONLY_FULL_GROUP_BY模式,可以通過將sql_mode設置為其他模式來禁用此模式。
SET sql_mode = 'STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION';
雖然在處理GROUP BY時使用ONLY_FULL_GROUP_BY模式更為嚴格,但也可能會導致在查詢中出現錯誤。如果您使用GROUP BY不能正常工作,則可以通過處理檢查模式來嘗試關閉該模式,以獲得所需的結果。
上一篇mysql only