在SQLServer中,假设我有一个表 Mytable
使用复合主键 [ColA, ColB, ColC]
. 我要执行以下伪查询:
select * from Mytable where (ColA,ColB,ColC) > (SomeValA,SomeValB,SomeValC)
这有可能吗?
编辑:示例:
create table Mytable (a integer, b integer, c integer);
insert into Mytable values (1,1,1),(1,1,2),(1,2,1),(2,1,1);
做 select * from Mytable where (a,b,c) > (1,1,2)
应返回行(1,2,1)和(2,1,1)
编辑2:让我重新表述一下:如果可以在表的列的有序子集上定义total order函数,那么有没有一种方法可以使用这个order函数作为 predicate 来查询表?
3条答案
按热度按时间r7xajy2e1#
我怀疑这就是你想要的:
否则,我要回复我的评论:“简言之:不。
>
两边都需要标量值(ColA, ColB, ColC) > (@I1, @I2, @I3)
不是价值。sql不按元组排序;这包括ORDER BY
. 语法,例如ORDER BY (ColA, ColB, ColC), OtherColumn
也会出错。bihw5rsg2#
可能最简单的就是做数学。即:
0ve6wy6x3#
如果要使用索引,则可能需要:
您还可以添加持久化的计算列和索引:
然后比较如下:
这可以使用索引。