Comment commander par l'union
Est-il possible de commander lorsque les données proviennent de plusieurs de sélectionner et d'union de l'ensemble.Comme
Select id,name,age
From Student
Where age < 15
Union
Select id,name,age
From Student
Where Name like "%a%"
Comment puis-je commander cette requête par nom.
Certains ont dit que vous pouvez interroger ressembler à ceci.
Select id,name,age
From Student
Where age < 15 or name like "%a%"
Order by name
Mais dans ce cas j'ai simplement ignorer cette solution.
Vous en remercie d'avance.
- Si vous avez la même colonne dans une requête union, puis à la fin mettre de l'ordre par votre nom de colonne.
Vous devez vous connecter pour publier un commentaire.
Il suffit d'écrire
la commande par est appliqué à la totalité du jeu de résultats
xxx UNION yyy ORDER BY zzz
la eqivalent de(xxx UNION yyy) ORDER BY zzz
Afin de faire le tri s'applique uniquement à la première déclaration de l'UNION, vous pouvez le mettre dans une sous-sélection avec l'UNION de TOUS (ces deux semblent être nécessaires dans Oracle):
Ou (s'adressant à Nicolas Carey commentaire) vous pouvez garantir le haut, SÉLECTIONNEZ est ordonné et les résultats s'affichent au-dessus du fond de SÉLECTIONNER comme ceci:
select
déclaration de référencement qui sous-sélection. Conformément à la Norme SQL, la commande de résultats n'est pas défini d'interdiction expliciteorder by
clause. Cette premièreselect
dans votre exemple, probablement renvoie ses résultats dans l'ordre renvoyé par la sous-sélection, mais il n'est pas garanti. De plus, que le ne *pas* garantir l'ordre de l'ensemble de résultats de l'ensemble de launion
(même règle dans la Norme). Si vous êtes en fonction sur le bon de commande, vous allez finir par être mordu.SELECT
.UNION
.Les deux autres réponses sont correctes, mais je trouvais ça intéressant de noter que l'endroit où je me suis coincé n'a pas été la réalisation que vous aurez besoin de la commande par l'alias et assurez-vous que l'alias est le même pour les deux sélectionne... donc
avis que je suis en utilisant des guillemets simples dans le premier select, mais backticks pour les autres.
Qui vous permettra d'obtenir de tri dont vous avez besoin.
SELECT a, b, c FROM (<insert union query here>) AS x;
si vous voulez vraiment éviter le retour de la colonne supplémentaire.Order By
est appliqué aprèsunion
, si justeajouter un
order by
clause à la fin de ces déclarations:Si je veux du genre à être appliquée à un seul de l'UNION, si l'utilisation de l'Union de tous:
Comme d'autres réponses a déclaré , "trier par" après la DERNIÈRE de l'Union devrait s'appliquer aux deux ensembles de données ont rejoint l'union.
J'ai eu deux ensembles de données, mais à l'aide de différentes tables, mais les mêmes colonnes.
'Order by' après la DERNIÈRE de l'Union n'a pas encore travaillé.
À l'aide de l'ALIAS de colonne utilisée dans 'order by' a fait le tour.
Donc la solution est d'utiliser l'Alias 'Nom_utilisateur' :
Pouvez utiliser ceci: