为什么&& 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[]
答案 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 ..)
所以优化器可以自由地忽略它。