4

次のようなことを行うよりも、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 つのフィールドがある場合もありますが、その場合はさらに醜くなります。

4

2 に答える 2

3

いいえ、それはとても簡単です。実際、これが最も簡単であることは、真理値表を作成することで証明できます。(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
于 2009-04-04T07:07:28.730 に答える
2

いいえ。ただし、タプルのメンバーを直接比較可能なものに結合することはできます。たとえば、A と B が両方とも 0..99 の間の数値の場合、A*100+B と @A*100+@B を加算して比較します。両方とも文字列の場合は、スペースを最大長まで埋めて連結します。

これは、穴から抜け出すために時々使用できる厄介なトリックですが、それ以外の場合は使用しないことをお勧めします. 1 つには、インデックス作成が無効になるため、各クエリで完全なテーブル スキャンを実行することになります。

于 2009-04-04T11:39:25.050 に答える