Maison > base de données > tutoriel mysql > Sous-requêtes MySQL/MariaDB : pourquoi le comportement ORDER BY change-t-il dans les versions plus récentes ?

Sous-requêtes MySQL/MariaDB : pourquoi le comportement ORDER BY change-t-il dans les versions plus récentes ?

DDD
Libérer: 2024-12-31 12:59:17
original
741 Les gens l'ont consulté

MySQL/MariaDB Subqueries: Why Does ORDER BY Behavior Change in Newer Versions?

MySQL/MariaDB : Trier par dans les sous-requêtes

Les versions récentes de MySQL et MariaDB ont introduit des changements dans la gestion de la commande par opérations dans les sous-requêtes.

Original Requête :

SELECT t2.Code from (select Country.Code from Country order by Country.Code desc ) AS t2;
Copier après la connexion

Problème :

Dans MySQL 5.5 et versions antérieures, la requête ci-dessus triait les résultats de la sous-requête par ordre décroissant comme spécifié. Cependant, dans les versions plus récentes de MySQL et MariaDB, les résultats des sous-requêtes ne sont plus triés par défaut par ordre décroissant.

Raison :

Le changement de comportement est dû à une respect de la norme SQL. Selon la norme, les résultats des sous-requêtes sont des ensembles de lignes non ordonnés. Par conséquent, l'application d'une clause order by dans une sous-requête peut ne pas garantir le tri souhaité.

Résolution :

Pour résoudre le problème, deux approches sont recommandées :

  • Ordre le plus externe par : Appliquer la clause order by au SELECT le plus externe déclaration :
SELECT t2.Code from (select Country.Code from Country) AS t2 ORDER BY t2.Code DESC;
Copier après la connexion
  • Limite dans la sous-requête : Si nécessaire, spécifiez une limite dans la sous-requête :
SELECT t2.Code from (select Country.Code from Country ORDER BY Country.Code DESC LIMIT 2) AS t2;
Copier après la connexion

Ceci garantit que la sous-requête produit un ensemble de résultats triés, qu'une clause order by soit appliquée ou non à la requête la plus externe. SELECT.

Comportement documenté :

MariaDB a officiellement documenté ce comportement, déclarant que la spécification d'une clause order by dans une sous-requête n'est pas autorisée par la norme SQL et devrait être traité comme un ensemble non ordonné de lignes. L'approche recommandée consiste à appliquer l'ordre par à la requête la plus externe ou à utiliser une limite si nécessaire.

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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal