Maison > base de données > tutoriel mysql > Pourquoi ma sous-requête MariaDB ignore-t-elle « ORDER BY » sans « LIMIT » ?

Pourquoi ma sous-requête MariaDB ignore-t-elle « ORDER BY » sans « LIMIT » ?

Barbara Streisand
Libérer: 2024-12-30 18:41:09
original
195 Les gens l'ont consulté

Why Does My MariaDB Subquery Ignore `ORDER BY` Without `LIMIT`?

Comportement ORDER BY de la sous-requête MySQL/MariaDB

Dans les versions MySQL antérieures à 5.5, la clause ORDER BY dans une sous-requête était appliquée comme prévu. Cependant, dans les versions récentes de MariaDB (par exemple, 10.0.14), la clause ORDER BY n'est pas appliquée dans les sous-requêtes lorsqu'aucune clause LIMIT n'est spécifiée.

Bogue ou changement de comportement ?

Après avoir étudié ce problème, il a été confirmé que ce comportement est intentionnel et non un bug. MariaDB suit la norme SQL, qui ne nécessite pas d'ordre spécifique pour les lignes dans les sous-requêtes. Par conséquent, la clause ORDER BY est ignorée dans les sous-requêtes.

Comportement documenté

Selon la documentation MariaDB, il est recommandé d'appliquer la clause ORDER BY à la requête la plus externe ou ajoutez une clause LIMIT pour appliquer l'ordre dans le sous-requête.

Exemple

La requête suivante démontre la différence de comportement :

SELECT t2.Code
FROM (
  SELECT Country.Code
  FROM Country
  ORDER BY Country.Code DESC
) AS t2;
Copier après la connexion

Sans clause LIMIT, MariaDB n'appliquera pas la commande ORDER Clause BY à l'intérieur de la sous-requête, ce qui entraîne un résultat non ordonné. Pour appliquer l'ordre décroissant, une clause LIMIT peut être ajoutée :

SELECT t2.Code
FROM (
  SELECT Country.Code
  FROM Country
  ORDER BY Country.Code DESC
  LIMIT 2
) AS t2;
Copier après la connexion

En ajoutant la clause LIMIT, la clause ORDER BY est appliquée dans la sous-requête, ce qui donne un résultat correctement décroissant.

Remarque

Il est important de noter que ce changement de comportement peut également affecter les versions de MySQL au-delà de la 5.5. Consultez toujours la documentation officielle ou les notes de version pour confirmer le comportement spécifique de la version que vous utilisez.

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