【发布时间】:2023-03-20 21:23:01
【问题描述】:
为什么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[]
【问题讨论】:
-
如果您需要特定的结果顺序,您应该在查询中添加
ORDER BY子句。您不应该指望没有明确顺序的查询或视图的顺序。 -
@macmoonshine 但是如果我运行 query select * from "view..." 那么它可以正常工作。
-
@Pooja-G 可能会,或者明天可能不会。这个错误的假设是如此强大,sqlite 甚至有一个编译指示来反转选择顺序,只是为了让这些错误重新出现。如果某样东西没有按规范排序,你就不能依赖它。
-
这与 && 无关,与 VIEW 无关。
-
SQL Server 例如甚至不允许
Order By内部视图(除了与TOP语句一起使用)
标签: sql postgresql