Maison > base de données > tutoriel mysql > Pourquoi la clause ORDER BY de ma sous-requête MariaDB semble-t-elle être ignorée ?

Pourquoi la clause ORDER BY de ma sous-requête MariaDB semble-t-elle être ignorée ?

Susan Sarandon
Libérer: 2025-01-03 18:02:39
original
569 Les gens l'ont consulté

Why Does My MariaDB Subquery's ORDER BY Clause Seem to Be Ignored?

MySQL/MariaDB : écart de commande par sous-requête

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.

Problème observé

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;
Copier après la connexion

Les résultats sont désormais triés par ordre croissant (ou par ordre naturel), contrairement à l'ordre décroissant attendu. order.

Enquête

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.

Solution recommandée

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;
Copier après la connexion

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;
Copier après la connexion

Comportement dans MySQL 5.6

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal