Сравнение кортежей в SQL - PullRequest
       34

Сравнение кортежей в SQL

4 голосов
/ 04 апреля 2009

Есть ли более удобный способ сравнения кортежа данных в T-SQL, чем делать что-то вроде этого:

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

В основном я ищу строки с (A, B)> (@A, @B) (тот же порядок, что и в предложении order by). У меня есть случаи, когда у меня есть 3 поля, но оно становится еще страшнее.

Ответы [ 2 ]

3 голосов
/ 04 апреля 2009

Нет. Это так просто, как только может. Фактически, вы можете доказать, что это самое простое, составив таблицу истинности. (Установите 3 столбца: A <@A, A = @ A и A> @A. Установите 3 строки: B <@B, B = @ B, B> @B.)

       A<@A | A=@A | A>@A
--------------------------
B<@B |  F   |  F   |  T
--------------------------
B=@B |  F   |  F   |  T
--------------------------
B>@B |  F   |  T   |  T
2 голосов
/ 04 апреля 2009

Нет, но вы можете объединить членов кортежа во что-то, что напрямую сопоставимо. Например, если A и B являются числами от 0 до 99, добавьте A * 100 + B и @ A * 100 + @ B и сравните их. Если они обе строки, дополняйте их пробелами до максимальной длины и объединяйте.

Это неприятный трюк, который иногда можно использовать, чтобы вытащить себя из дыры, но в остальном его лучше не использовать. Во-первых, он потерпит индексацию, поэтому вы будете выполнять полную проверку каждого запроса.

...