Comportement non déterministe de MySQL GROUP BY
clause sans fonction d'agrégation
Lorsque vous utilisez la clause GROUP BY
dans une requête MySQL sans fonction d'agrégation dans la clause SELECT
, son comportement peut être non déterministe. En effet, MySQL permet d'omettre des colonnes de la clause GROUP BY
pour des raisons de performances.
Cependant, cette omission ne fonctionne que si la colonne omise a la même valeur dans toutes les lignes de chaque groupe. Si ce n'est pas le cas, comme le montre l'exemple, le serveur est libre de choisir n'importe quelle valeur dans le groupe. Par conséquent, la valeur de retour n'est pas définie.
Pour garantir des résultats prévisibles, il est recommandé d'inclure toutes les colonnes qui ne sont pas agrégées dans la clause GROUP BY
. De plus, il n'est généralement pas recommandé d'utiliser le caractère générique *
pour sélectionner toutes les colonnes d'un tableau, car cela peut conduire à un comportement imprévisible dans des situations similaires.
La documentation MySQL indique clairement : "Lors de l'utilisation de cette fonctionnalité, toutes les lignes de chaque groupe doivent avoir la même valeur pour les colonnes omises de la section GROUP BY
. Si cette condition n'est pas remplie, les résultats de la requête ne sont pas définis." .
Par conséquent, assurez-vous d'examiner attentivement les colonnes incluses dans la clause GROUP BY
et évitez d'omettre les colonnes qui contiennent des valeurs différentes au sein du regroupement.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!