Sql SELECT TOP 1
J'obtiens des résultats étranges à partir d'un tableau que je suis en sélection. Considérons le tableau suivant:
USERID TICKETSASSIGNED
1 0
100 0
101 0
102 0
103 0
Maintenant, si j'ai le sql suivant:
SELECT TOP 1 USERID
FROM TABLEX
ORDER BY TICKETSASSIGNED
Le résultat je m'attends à obtenir est "1", mais la plupart de tous les temps je suis "100", le deuxième enregistrement. Depuis TICKETSASSIGNED
valeurs sont toutes "0", il choisit de façon aléatoire laquelle il pense, c'est TOP 1 car c'est le domaine que je vais commander sur. Pour obtenir la valeur correcte de "1" dans ce cas, j'ai aussi commander sur USERID
.
Des idées?
Qu'est-ce que votre clé primaire? Les données pourraient en fait être stockés différents des résultats qui sont affichés.
OriginalL'auteur David W | 2010-08-10
Vous devez vous connecter pour publier un commentaire.
C'est le comportement par défaut dans tous les SQL - il n'y a pas de garantie si il n'y a pas de clause ORDER BY, et dans ce cas, vous n'êtes pas de la commande de données pertinentes pour la base de données arbitrairement choisit une ligne.
Utilisation:
OriginalL'auteur OMG Ponies
Si vous consultez la documentation de
TOP
: TOP (Transact-SQL), plus précisément les deux premiers paragraphes dans les Remarques, il est dit explicitement que le DESSUS n'est pas de l'ordre des lignes. En tant que tel, la commande que vous avez imposées vous-même est celle qui est utilisée.Malheureusement, votre commande est incomplète. Ça n'arrive qu'à produire ce que vous voulez parfois.
La manière correcte est exactement ce que vous avez compris, vous avez besoin de commande par code d'utilisateur ainsi.
OriginalL'auteur Lasse Vågsæther Karlsen
Vous avez besoin d'une deuxième colonne dans votre
ORDER BY
clause dans ce cas:Sans cela, il est probablement vous donnant les enregistrements commandés par
TICKETASSIGNED
, puis par leur emplacement physique dans la table, par exemple l'ordre où ils ont été insérés dans la plupart des cas.OriginalL'auteur Nick Craver
Si vous commandez uniquement par
TICKETSASSIGNED
et ils ont tous les mêmes valeurs, il n'y a pas de raison spécifique d'enregistrement doit être retourné à la première. Si vous voulez obtenir le haut à l'aide deUSERID
que le champ suivant à l'ordre, alors oui, vous devez juste ajouterUSERID
à votre clause order by.OriginalL'auteur rosscj2533