Sql 用于';其中(col1,col2)<;(val1,val2)和#x27;

Sql 用于';其中(col1,col2)<;(val1,val2)和#x27;,sql,hibernate,postgresql,pagination,criteria,Sql,Hibernate,Postgresql,Pagination,Criteria,正如我的问题所述,我想知道在WHERE子句中,我们称之为具有该类型条件的查询类型,即: SELECT * FROM mytable WHERE (col1, col2) < (1, 2); current在本例中,我检索的记录是我们希望在之前或之后获取记录的行。在本例中,我在后面执行,正如greaterThan函数调用所指出的那样。WHERE(col1,col2)

正如我的问题所述,我想知道在
WHERE
子句中,我们称之为具有该类型条件的查询类型,即:

SELECT * FROM mytable
WHERE (col1, col2) < (1, 2);
current
在本例中,我检索的记录是我们希望在之前或之后获取记录的行。在本例中,我在后面执行,正如
greaterThan
函数调用所指出的那样。

WHERE(col1,col2)<(val1,val2)
WHERE (col1, col2) < (val1, val2)
上述语法称为行值构造函数/元组语法/行子查询

ANSI SQL行值构造函数语法,有时称为元组 语法,即使基础数据库可能不支持该语法 概念这里,我们通常指的是多值比较, 通常与组件关联

或者也可以称之为

在比较谓词中使用行值构造函数(RVC)——相当长的一段时间

RVC通常出现在INSERT语句中,但很少作为WHERE子句的一部分


我怀疑这种语法在JPA或Hibernate Criteria API中是否有直接的支持,但要实现相同的逻辑,总有一种变通方法。

常见的短期术语就是“行值”
。或“行值比较”,用于演示的操作。自(!)起,该功能就一直存在于SQL标准中。Postgres是目前唯一一个在所有方面都支持它的主要RDBMS,特别是在最佳索引支持下

特别是,表达式
(col1,col2)<(1,2)
只是Postgres中
行(col1,col2)
的简写。 表达式
行(col1,col2)
也被称为-就像
数组[col1,col2]
是一个函数

它方便地缩写为更详细、等效的表达式:

col1 < 1 OR (col1 = 1 AND col2 < 2)
考虑以下示例:
(1,1)

以下是Markus Winand的演示,详细讨论了分页功能:

行值比较从第20页开始。我提到的支持矩阵在第45页


我与我引用的任何来源都没有任何关联。

手册这被称为行值构造,我擅自调整了表达式的定义。原始的“如果
col1
小于'1',或者如果不是,如果col2小于'2',请提供所有记录”无法准确捕获它。@Patrick了解更广阔的视野。在纯ANSI标准中,它被称为RVC。好吧,这没什么错。PostGreSQL和Oracle使用相同的术语。RVC包含在ANSITHE中确实有一个解决方法来获得相同的逻辑((col1>val1)或(col1=val1和col2>val2)),但这实际上比使用行值构造函数的性能差。显然,JPA仍在使用它:@Ish查看上面的编辑,我能够进行行查询:)非常好,这个分页示例/幻灯片就是我想要这样做的正确方法(使用行值进行具有日期和id索引的高效查询)
col1 < 1 OR (col1 = 1 AND col2 < 2)
col1 < 1 AND  AND col2 < 2