Y a-t-il une raison pour laquelle ou pourquoi ne devriez-vous pas faire une "commande par" dans une sous-requête? p>
9 Réponses :
Vous devez l'utiliser si la sous-requête utilise une sorte de type limite code> /
haut code>.
SQL Server code> ne le permettra que si le La sous-requête contient
top code> ou
de la clause XML code> aussi: p>
Vous pouvez le faire, mais je ne voudrais généralement pas que vous n'ayez pas besoin. P>
L'optimiseur l'ignorera (ou lancer une erreur?) P>
voir " matérialisation intermédiaire " pour certains usages. P>
En fonction de la taille de la sous-requête, il aura une incidence sur la performance à un degré variable. P>
L'ordre n'aurait pas d'importance sur une sous-requête cependant. Vous devriez être capable de déplacer la commande par partie à la requête extérieure (qui devrait être celle qui renvoie les résultats finaux). P>
Oui: cela ne devrait pas être fait, car il n'a pas de sens conceptuellement. P>
La sous-requête sera utilisée dans une requête extérieure (sinon elle serait inutile), et que la requête extérieure devra commander de toute façon, il n'ya donc aucun point de commander la sous-requête. P>
C'est parce que la requête donne lieu à SQL ne viendra aucun ordre particulier, à moins que vous n'utilisiez une commande explicite. Donc, même si vous avez utilisé commande dans la sous-requête, vous n'avez aucune garantie que cela affectera l'ordre des résultats de la requête extérieure; C'est donc inutile. P>
Cela peut bien sûr faire une différence dans certains SGDB spécifiques en raison de sa mise en œuvre, mais qui sera spécifique à la mise en œuvre, et non quelque chose que vous devriez compter sur. P>
Edit: EM> Bien sûr, si vous utilisez le haut ou la limite dans la sous-requête, vous em> doit utiliser la commande. Mais ce n'est pas standard SQL de toute façon ... P>
C'est totalement légitime. C'est à dire. Sélectionnez ID des entrées où l'auteur_Id dans (Sélectionnez ID de l'ordre des auteurs par nom de nom) Code> Mais vous obtiendrez vraiment les mêmes résultats. P>
D'habitude? Pouvez-vous donner un cas où les résultats diffèrent-ils?
Il diffère si vous ajoutez une déclaration de limite à votre sous-sélection. Dans ce cas, si vous souhaitez voir toutes les entrées des 5 meilleurs auteurs par nom, vous modifiez votre sous-sélection vers (Sélectionnez ID de l'ordre des auteurs par noms de la limite 5).
Vrai. Avec le haut / la limite, cela fait une différence (et est nécessaire, parfois même requis). Sinon, cela ne fait pas une différence.
Veuillez noter que mysql code> ne prend pas en charge
ordre par ... limite code> dans le
dans code> sous-requêtes.
sauf si vous n'utilisez pas le haut, il n'est pas utile car vous commandera de toute façon dans la requête extérieure de toute façon p>
Aucun ordre par est valide dans une sous-requête Lorsque vous êtes intéressé par un sous-ensemble de données globales, vous avez donc toujours besoin d'un haut code> (SQL Server). Il ne sert à rien d'avoir une commande par sans top dans une sous-requête car la commande globale des résultats est traitée par la requête extérieure. P>
Vous ne devez pas l'utiliser. Selon l'art de SQL ', cela empêche effectivement l'optimiseur d'effectuer diverses optimisations qu'elle pourrait autrement faire car cela transforme pré-maturel. p>
Les gens plus intelligents disent que ce n'est pas un moyen propre / valide de le faire. Dans mon cas, sélectionnez Top 100% en sous-requête résolvée le problème. P>
acclamations p>