首頁 >資料庫 >mysql教程 >為什麼 MySQL 允許選擇不在 GROUP BY 子句中的欄位?

為什麼 MySQL 允許選擇不在 GROUP BY 子句中的欄位?

Susan Sarandon
Susan Sarandon原創
2024-12-23 08:40:17377瀏覽

Why Does MySQL Allow Selecting Columns Not in the GROUP BY Clause?

選擇不包含在GROUP BY 子句中的欄位:MySQL 的不明確行為

在MySQL 中,可以選擇不包含在聚合函數或GROUP BY 中的列子句,這可能會讓來自其他SQL 資料庫的程式設計師感到困惑。此行為偏離 ANSI SQL 標準,該標準要求所有選定的列都成為分組的一部分或出現在聚合函數中。

不明確的查詢和任意值選擇

當MySQL遇到這樣的查詢時,它會默默地從每個群組的欄位中傳回任意值,通常是組中第一行或最後一行的值。此行為可能會導致不明確的結果,特別是當非分組列中的值在每個組內不一致時。

範例查詢

考慮以下MySQL 查詢:

在此查詢中,col4 不是GROUP BY 子句或聚合函數的一部分。 MySQL 將為每個群組任意選擇一個 col4 值。如果群組中的不同行具有不同的 col4 值,這可能會出現問題。

函數依賴性和確定性結果

MySQL 允許在功能正常時選擇非分組資料列取決於 GROUP BY 子句中的欄位。這意味著對於分組列的每個值,非分組列只有一個可能的值。在這種情況下,查詢將傳回確定性結果。

但是,需要注意的是,MySQL 對於模糊查詢的行為可能會在未來版本中發生變化。因此,建議避免在 SELECT 子句中使用非分組列,除非它們明確包含在 GROUP BY 子句或聚合函數中。

"ONLY_FULL_GROUP_BY" SQL 模式

MySQL 5.7 引入了「ONLY_FULL_GROUP_BY」SQLSQL 模式,該模式強制執行GROSIUP 標準查詢的 ANROSI SQLSI。啟用此模式後,選擇沒有聚合函數的非分組列將導致錯誤。

以上是為什麼 MySQL 允許選擇不在 GROUP BY 子句中的欄位?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn