Dans les versions MySQL antérieures à 5.5, les sous-requêtes respectaient la clause ORDER BY. Cependant, ce comportement a changé dans les versions récentes, notamment MariaDB 10.0.14.
Lors de l'exécution de la requête suivante dans MariaDB 10.0.14 :
SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Les résultats sont désormais triés par ordre croissant (ou par ordre naturel), contrairement à l'ordre décroissant attendu. order.
Après examen de la documentation de MariaDB, le comportement observé n'est pas considéré comme un bug. Selon la norme SQL, les tables et les sous-requêtes sont des ensembles de lignes non ordonnés. Par conséquent, l'optimiseur peut choisir d'ignorer la clause ORDER BY dans la sous-requête.
Pour garantir un classement cohérent des résultats, il est recommandé d'appliquer la clause ORDER BY à la requête externe. :
SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;
Alternativement, l'utilisation d'une clause LIMIT dans la sous-requête peut également forcer ORDER BY à être appliqué :
SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;
Bien que des tests spécifiques soient actuellement indisponibles, les commentaires sur le rapport de bogue suggèrent que MySQL 5.6 peut également présenter le même comportement que MariaDB 10.0.14, en ignorant la clause ORDER BY dans les sous-requêtes.
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!