En plaçant l'union entre deux instructions, il génère une erreur. Le code est donné ci-dessous:
J'ai essayé de placer les crochets commençant à l'instruction select et se terminant à order by name. Mais rien ne fonctionne pour moi. Quelqu'un peut-il s'il vous plaît suggérer ce qui ne va pas avec ce code?
select TOP(1) name from hack where len(name) in (select max(len(name)) from hack ) order by name UNION select TOP(1) name from hack where len(name) in (select min(len(name)) from hack ) order by name
Réception de l'erreur mentionnée ci-dessous:
Syntaxe incorrecte à côté du mot clé "UNION".
3 Réponses :
Vous devez utiliser des sous-requêtes:
select name
from (
select TOP(1) name
from hack
where len(name) in (select max(len(name)) from hack )
order by name
) A
UNION
select name
from (
select TOP(1) name
from hack
where len(name) in (select min(len(name)) from hack )
order by name
) B
Merci HoneyBadger. Ceci est vraiment utile. Je voulais juste savoir ce qui vous oblige à imbriquer une autre requête.
Le où n'est pas nécessaire:
select h.*
from (select top (1) name
from hack h
order by len(name), name asc
) h
union all
select h.*
from (select top (1) name
from hack h
order by len(name) desc, name
) h;
J'ai essayé cette requête. Mais que faire s'il y a deux noms de même longueur. L'un commence par «a» et l'autre par «m». Donc, dans ce cas, la requête doit afficher le nom commençant par «a», mais après l'exécution de cette requête, elle affiche le nom avec «m». Pouvez-vous s'il vous plaît me faire savoir comment je peux modifier cette requête pour de meilleurs résultats?
@ user11497433. . . Ajoutez simplement une deuxième clé à la commande par .
Accéder à la table une seule fois:
SELECT a.Name
FROM (
SELECT h.Name
,ROW_NUMBER()OVER(ORDER BY LEN(h.Name) DESC, h.Name) AS [rnMax]
,ROW_NUMBER()OVER(ORDER BY LEN(h.Name) ASC, h.Name) AS [rnMin]
FROM hack h
) a
WHERE (a.rnMin = 1 OR a.rnMax = 1)
GROUP BY a.Name
ORDER BY a.Name
;
Utilisez-vous SQL Server? Je suppose que vous avez besoin de sous-requêtes pour impliquer ORDER BY.
Oui, j'utilise SQL Server. L'ajout d'une sous-requête fonctionne pour moi. Merci :)
si vous supprimez le premier ordre par nom juste avant l'Union; vous n'obtiendrez plus d'erreur et votre requête donnera le jeu de résultats attendu dont vous avez besoin. S'il vous plaît lire sur "l'ordre d'exécution des requêtes" (indice pourquoi vous pouvez utiliser l'alias de colonne dans l'ordre par clause).