MySQL GROUP BY
子句在无聚合函数时的非确定性行为
在MySQL查询中使用GROUP BY
子句但SELECT
子句中没有聚合函数时,其行为可能是非确定性的。这是因为出于性能原因,MySQL允许从GROUP BY
子句中省略列。
然而,只有当省略的列在每个分组内的所有行中具有相同的值时,这种省略才有效。如果并非如此,如示例所示,服务器可以自由选择组中的任何值。结果,返回值是不确定的。
为了确保结果的可预测性,建议将所有未进行聚合的列包含在GROUP BY
子句中。此外,通常不建议使用*
通配符来选择表中的所有列,因为它可能导致类似情况下的不可预测行为。
MySQL文档明确指出:“当使用此功能时,每个组中的所有行对于从GROUP BY
部分省略的列应具有相同的值。”如果此条件不满足,则查询结果是不确定的。
因此,务必仔细考虑GROUP BY
子句中包含的列,并避免省略在分组内包含不同值的列。
以上是为什么在没有聚合函数的情况下 MySQL 的 GROUP BY 行为是不可预测的?的详细内容。更多信息请关注PHP中文网其他相关文章!