Comment puis-je les entrées de commandes dans une UNION sans ORDONNANCE PAR?
Comment puis-je être sûr que mon résultat aura a
premier et b
seconde? Il pourrait m'aider à résoudre un épineux problème de la commande.
Voici un exemple simplifié de ce que je fais:
SELECT a FROM A LIMIT 1
UNION
SELECT b FROM B LIMIT 1;
- Je me rends compte que vous n'aimez pas RichB, mais se rendent compte de ce que votre question ressemble sur la page principale, si les deux seules lignes que vous voyez sont de code SQL, et non pas la question. C'est pourquoi il a modifié la façon dont il l'a fait, et franchement, sa modification faite à la question look beaucoup mieux.
- Séparée de son 'dures' ton de ses modifications. Ils sont séparés. Il est frappant dans sa langue; mais cela ne fait pas ses modifications moins valides.
- Restaurée Riche de modifications. Pas le parti de personne ni de rien d'autre que la qualité de la question.
- Nous discutons de ce sujet tous les jours sur irc.freenode.net #stackoverflow. N'hésitez pas à joindre le canal et de faire connaissance avec moi (nous?)
- Verrouillé - pas utile
Vous devez vous connecter pour publier un commentaire.
Je ne pense pas que l'ordre est garanti, au moins pas dans tous les SGBD.
Ce que j'ai fait dans le passé pour la commande dans les Syndicats est:
ORDER BY
s'applique à l'ensemble de l'UNION, de ne pas la 2ème partie. Avec ou withjout supports et dans tous les 3 SGBD: Postgresql, SQL Server, MySQL. Th eonly façon o thave s'applique dans la 2ème partie est d'utiliser des crochets comme ceci:SELECT ...) UNION (SELECT ...ORDER BY);
Mais cela ne signifie pas que le résultat sera commandé. UNUON n'est pas nécessairement préserver l'ordre interne des sous-requêtes.Votre jeu de résultats avec
UNION
permettra d'éliminer les valeurs distinctes.Je ne trouve pas de preuve dans la littérature, mais à partir de
10
ans d'expérience, je peux dire queUNION ALL
ne maintenir l'ordre, au moins dansOracle
.Ne repose pas sur ce point, cependant, si vous êtes à la construction d'une centrale nucléaire ou quelque chose comme ça.
Non, l'ordre des résultats d'une requête SQL est contrôlée seulement par la clause ORDER by. Il se peut que vous arrivez à voir des résultats classés sans une clause ORDER BY dans certaines situation, mais c'est par hasard (par exemple, un effet secondaire de l'utilisation de l'optimiseur de requête actuelle de plan) et ne sont pas garantis.
Quel est le délicat problème de la commande?
Je sais que pour Oracle, il n'y a aucune garantie qui va sortir en premier sans une ordonnance par. Le problème est que si vous l'essayez, il peut sortir dans l'ordre correct, même pour la plupart du temps de l'exécuter. Mais dès que vous compter sur elle dans la production, il va sortir de mal.
Je croyais pas, puisque la base de données serait très probablement besoin de faire une COMMANDE pour l'UNION.
L'UNION de TOUS peuvent se comporter différemment, mais YMMV.
La réponse courte est oui, vous obtiendrez Un puis B.