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