【问题标题】:Comparing Tuples in SQL比较 SQL 中的元组
【发布时间】:2009-04-04 03:48:19
【问题描述】:
在 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 个字段,但它变得更加丑陋。
【问题讨论】:
标签:
sql
comparison
operators
sql-order-by
tuples
【解决方案1】:
没有。这很简单。事实上,你可以通过绘制一个真值表来证明这是最简单的。 (设置 3 列:A@A。设置 3 行:B@B。)
A<@A | A=@A | A>@A
--------------------------
B<@B | F | F | T
--------------------------
B=@B | F | F | T
--------------------------
B>@B | F | T | T
【解决方案2】:
不,但您可以将元组的成员组合成可直接比较的东西。例如,如果 A 和 B 都是 0..99 之间的数字,则添加 A*100+B 和 @A*100+@B 并比较它们。如果它们都是字符串,则用空格填充到最大长度并连接。
这是一个令人讨厌的技巧,有时您可以用来让自己摆脱困境,但最好不要使用它。一方面,它会破坏索引,因此您将对每个查询进行全表扫描。