MySQL/MariaDB : Modification du comportement de ORDER BY dans les sous-requêtes
Considérez la requête suivante, précédemment utilisée avec succès dans MySQL 5.5 :
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Dans les versions récentes de MySQL (dont MariaDB 10.0.14), cette requête n'est plus trie les résultats par ordre décroissant comme prévu. Ce changement de comportement a soulevé des inquiétudes concernant un bug potentiel.
Cependant, après enquête, il a été confirmé que ce changement est intentionnel et n'est pas considéré comme un bug. MariaDB a documenté ce comportement, expliquant qu'une sous-requête renvoie un ensemble de lignes non ordonnées et que la clause ORDER BY dans la sous-requête peut être ignorée.
Pour garantir l'ordre souhaité, il est recommandé d'appliquer la clause ORDER BY à la requête la plus externe ou, si nécessaire, ajoutez une clause LIMIT à la sous-requête :
SELECT t2.Code FROM ( SELECT Country.Code FROM Country ORDER BY Country.Code DESC LIMIT 2 ) AS t2;
Cette requête révisée applique correctement le tri et produit le résultat souhaité résultats.
Notez que ce changement de comportement s'applique également à MySQL 5.6, selon les commentaires sur le rapport de bug original. Les développeurs doivent être conscients de ce changement et ajuster leurs requêtes en conséquence pour maintenir le comportement de tri souhaité.
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!