我想知道当使用比较运算符(例如>
or )执行行子查询时>=
,比较顺序是使用字典(即字典)顺序定义的还是按元素定义的?
也就是说,对于ROW (A, B)
,应该
(79, 48) > (75, 52)
在子句的行查询中是TRUE
(字典)还是(元素方式)?FALSE
WHERE
我在 PostgreSQL 中对此进行了测试,似乎它使用的是字典顺序,即(79, 48) > (75, 52)
因为TRUE
第二79 > 75
个组件因此无关紧要。环顾四周,似乎 MySQL 也是这种情况:MySQL row subquery comparison issue,而 MySQL 文档似乎在这一点上令人困惑。搜索postgresql row subquery
并没有显示太多关于比较顺序的信息。
虽然字典顺序从计算机科学的角度来看是有意义的,但对于数据库用户来说可能看起来有点奇怪,因为行的顺序现在取决于您在 SQL 中首先列出的列。例如,使用字典顺序,我们应该有:
(52, 75) > (48, 79)
为ROW (B,A)
. 比较相同的行,顺序正好相反,因为列B
首先列出。
我的问题是:
这种行为(在行查询中使用字典顺序)是来自 SQL 标准/跨供应商还是特定于实现?有这方面的参考吗?