2009-04-04 10 views
4
SQL

Y at-il moyen plus pratique de comparer un tuple de données en T-SQL que de faire quelque chose comme ceci:comparaison Tuples dans

SELECT TOP 100 A, B 
FROM MyTable 
WHERE (A > @A OR (A = @A AND B > @B)) 
ORDER BY A, B 

Fondamentalement, je suis à la recherche de lignes avec (A, B)> (@A, @B) (le même ordre que j'ai dans l'ordre par clause). J'ai des cas où j'ai 3 champs, mais ça devient encore plus moche alors.

Répondre

3

Non. C'est aussi simple que ça. En fait, vous pouvez prouver que c'est le plus simple en tirant une table de vérité. (Set 3 colonnes: A < @A, A = @ A, et A> @A Set 3 lignes:.. B < @B, B = @ B, B> @B)

 A<@A | [email protected] | A>@A 
-------------------------- 
B<@B | F | F | T 
-------------------------- 
[email protected] | F | F | T 
-------------------------- 
B>@B | F | T | T 
2

Non, mais vous pouvez combiner les membres du tuple en quelque chose de directement comparable. Par exemple, si A et B sont tous deux des nombres compris entre 0 et 99, ajoutez A * 100 + B et @ A * 100 + @ B et comparez-les. Si ce sont les deux cordes, tamponnez avec des espaces à la longueur maximale et concaténer.

Ceci est une mauvaise astuce que vous pouvez parfois utiliser pour vous sortir d'un trou, mais sinon, il vaut mieux ne pas l'utiliser. D'une part, il va vaincre l'indexation, donc vous allez faire une analyse complète de chaque requête.