gpt4 book ai didi

mysql - SQL ROW 子查询中比较的顺序定义?

转载 作者:行者123 更新时间:2023-11-29 11:36:43 25 4
gpt4 key购买 nike

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

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

(79, 48) > (75, 52) 

WHERE 子句中的行查询中是 TRUE(字典)还是 FALSE(按元素)?

我在 PostgreSQL 中对此进行了测试,它似乎使用了字典顺序,即 (79, 48) > (75, 52)TRUE 因为 79 > 75 因此第二个组件并不重要。搜了一圈,MySQL好像也是这样:MySQL row subquery comparison issue ,并且 MySQL 文档在这一点上似乎令人困惑。搜索 postgresql row subquery 不会显示太多有关比较顺序的信息。

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

 (52, 75) > (48, 79)  

对于行(B,A)。比较相同的行,顺序完全相反,因为 B 列首先列出。

我的问题是:

此行为(在行查询中使用字典顺序)是来自 SQL 标准/跨供应商还是特定于实现?有这方面的引用资料吗?

最佳答案

这记录在章节 Row Constructor ComparisonPostgres 手册:

For the <, <=, > and >= cases, the row elements are comparedleft-to-right, stopping as soon as an unequal or null pair of elementsis found. If either of this pair of elements is null, the result ofthe row comparison is unknown (null); otherwise comparison of thispair of elements determines the result. For example, ROW(1,2,NULL) < ROW(1,3,0) yields true, not null, because the third pair of elementsare not considered.

还有:

Note: Prior to PostgreSQL 8.2, the <, <=, > and >= cases were nothandled per SQL specification. A comparison like ROW(a,b) < ROW(c,d)was implemented as a < c AND b < d whereas the correct behavior isequivalent to a < c OR (a = c AND b < d).

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

ORDER BY 中的逻辑基本相同SELECT 的条款查询:从左到右比较项目,直到找到第一个不等式 - NULL 值除外,它按默认升序对最后进行排序。

相关:

关于mysql - SQL ROW 子查询中比较的顺序定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36465058/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com