2010-06-25 3 views
0

Comment l'ordre de recherche de « où EXISTE » être changésql « où existe » ordre de recherche

exemple

SELECT name, dialcode 
FROM np_prefixes 
WHERE EXISTS (SELECT d.name 
      FROM np_prefixes d 
      GROUP BY d.name) 
GROUP BY name 

)

-je besoin pour obtenir le premier enregistrement, il transparaît dans l'ordre inverse est actuellement comme exemple le résultat retourné est 21379 (haut à bas) mais j'ai besoin de 21377 (bas à haut)

Répondre

1

essayez ceci:

Select name, Min(dialcode) 
From np_prefixes 
Where Exists(Select d.name 
       From np_prefixes d 
       Group By d.name) 
Group By name 

et en fait, vous n'avez pas besoin Where Exists (comme vous l'avez écrit, il ne fait rien de toute façon):

Select name, Min(dialcode) 
From np_prefixes 
Where name is not null 
Group By name 
+0

Je ne pense pas que vous ayez besoin de la ligne 'WHERE name not not null' non plus. –

+0

@Marcus ... Juste pour éviter d'avoir une ligne agrégée pour les noms nuls, s'il en existe ... –

1

COMMANDER PAR DESC? Je ne suis pas sûr que je comprends votre question si

1

L'ordre dans une clause EXISTS n'a pas d'importance. EXISTS ne renvoie que true ou false dès que l'un des critères est satisfait.

Si vous voulez que la sortie finale commandée différemment, vous devez spécifier une clause ORDER BY:

SELECT name, dialcode 
    FROM np_prefixes 
WHERE EXISTS (SELECT d.name 
        FROM np_prefixes d 
       GROUP BY d.name) 
GROUP BY name 
ORDER BY dialcode 
1

Je pense que votre question est la même que celle-ci:

SELECT name, dialcode 
FROM np_prefixes 
GROUP BY name 

Jetez un oeil à MAX() ou MIN() pour obtenir la valeur la plus haute ou la plus basse dans un groupe ou éventuellement juste ORDER BY et une clause limit.