MySQL GROUP BY
子句在無聚合函數時的非確定性行為
在MySQL查詢中使用GROUP BY
子句但SELECT
子句中沒有聚合函數時,其行為可能是非確定性的。這是因為出於效能原因,MySQL允許從GROUP BY
子句中省略列。
然而,只有當省略的列在每個分組內的所有行中具有相同的值時,這種省略才有效。如果並非如此,如範例所示,伺服器可以自由選擇群組中的任何值。結果,傳回值是不確定的。
為了確保結果的可預測性,建議將所有未進行聚合的欄位包含在GROUP BY
子句中。此外,通常不建議使用*
通配符來選擇表中的所有列,因為它可能導致類似情況下的不可預測行為。
MySQL文件明確指出:「當使用此功能時,每個群組中的所有行對於從GROUP BY
部分省略的列應具有相同的值。」如果此條件不滿足,則查詢結果是不確定的。
因此,務必仔細考慮GROUP BY
子句中包含的列,並避免省略在分組內包含不同值的列。
以上是為什麼在沒有聚合函數的情況下 MySQL 的 GROUP BY 行為是不可預測的?的詳細內容。更多資訊請關注PHP中文網其他相關文章!