&安培;&安培;操作员更改结果的顺序

时间:2016-12-21 08:18:38

标签: 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%',之类的where子句中使用了一些其他条件,然后它不会影响select语句给出的结果顺序。那么为什么不要"ClassID" && ARRAY[53]:: bigint[]

1 个答案:

答案 0 :(得分:6)

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

强制执行特定订单(E.G。按入学日期)的唯一方法是使用ORDER BY条款。

编辑:关于您的评论,VIEW不能包含ORDER BY条款,因此该条款应位于 end 查询,否则可以忽略。
E.G。

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

当它在视图中时,它就像:

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

所以优化器可以自由地忽略它。