SQL ROW子查询中的比较的订单定义?

天花

我想知道何时使用比较运算符(例如>)执行行子查询时>=,比较顺序是使用字典顺序(即字典)顺序定义的还是按元素定义的?

也就是说,对于ROW (A, B),应

(79, 48) > (75, 52) 

子句中的TRUE(字典)或FALSE(按元素)在行查询中WHERE

我在PostgreSQL中对此进行了测试,似乎它使用的是字典顺序,即(79, 48) > (75, 52)TRUE因为79 > 75第二个组件因此无关紧要。到处搜索,MySQL似乎也是如此:MySQL行子查询比较问题,并且MySQL文档在这一点上似乎令人困惑。搜索postgresql row subquery不会显示太多关于比较顺序的信息。

从计算机科学的角度来看,字典的顺序是有意义的,但对于数据库用户来说,这可能有点奇怪,因为行的顺序现在取决于您在SQL中首先列出的列例如,使用字典顺序,我们应该具有:

 (52, 75) > (48, 79)  

ROW (B,A)比较相同的行,因为列B在最前面,所以顺序恰好相反

我的问题是:

这是SQL标准/跨供应商的行为(在行查询中使用字典顺序)还是特定于实现?有什么参考吗?

欧文·布兰德斯特(Erwin Brandstetter)

Postgres手册的行构造器比较一章中进行了介绍

对于<<=>>=的情况下,行元素进行比较左到右,只要不相等的或空对元素被发现停止。如果这对元素中的任何一个为null,则行比较的结果未知(null);否则,结果为null。否则,这对元素的比较确定结果。例如,ROW(1,2,NULL) < ROW(1,3,0)因为不考虑第三对元素,所以产生的是true,而不是null。

和:

注意:在PostgreSQL 8.2的<<=>>=案件不是每个SQL规范处理。ROW(a,b) < ROW(c,d)实施了的比较a < c AND b < d而正确的行为等同于a < c OR (a = c AND b < d)

这说明现代Postgres的行为符合SQL标准。

基本上与查询ORDER BY子句中的逻辑相同SELECT:项从左到右进行比较,直到找到第一个不等式为止-NULL值除外,NULL值以默认的升序排在最后

有关的:

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章