sql - && 运算符改变结果的顺序

标签 sql postgresql

<分区>

为什么 PostgreSQL 9.4 的 && 运算符用于检查两个数组的重叠,改变结果的顺序?

我有一个问题

Select *  FROM "View_Student_Plan" WHERE  "ClassID" && ARRAY[53]:: bigint[] 

我的观点是按入学日期排序的。 它工作正常,如果我使用

Select *  FROM "View_Student_Plan"

但是当我将剩余部分附加到查询时,它会改变结果的顺序。

我在 where 子句中使用了一些其他条件,例如 Student_Name like 'P%', 然后它不会影响 select 语句给出的结果顺序。那为什么不为 "ClassID"&& ARRAY[53]::bigint[]

最佳答案

在任何 RDBMS 中,输出的顺序都没有默认设置,每次都可以进行不同的排序!它可以按索引、优化器、默认设置和 ETC 排序。

强制执行特定顺序(例如按入场日期)的唯一方法是使用 ORDER BY 子句。

编辑:关于您的评论,VIEW 不能包含 ORDER BY 子句,它无效,因为该子句应该在查询的末尾,否则可以忽略。
例如

SELECT * FROM YourView
ORDER BY....--THIS WILL WORK

当它在 View 中时:

SELECT * 
FROM (SELECT * FROM ....
      ORDER BY ..)

因此优化器可以随意忽略这一点。

关于sql - && 运算符改变结果的顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41258113/

相关文章:

SQL Server 如果没有可用的 future 日期,则选择最近的过去日期

java - 通过 hibernate 插入数据库

sql - 这个替换 JSON 文本的 SQL 查询意味着什么?

postgresql - 将表从 postgres 数据库同步/导入到 elasticsearch 的正确方法是什么?

php - 如何在 MySQL 中运行更新查询并替换匹配的字符串

php - 将数据添加到表形式 sql 并存储回新数据库

java - SQL 查询中列名称前面的值是什么?

sql - Kotlin 公开 - 没有标识列的表的实体

sql - PostgreSQL : Converting comma separated integer values and intervals to sequenced numbers

postgresql - Redshift : New table but Group members can't query