Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql &&;运算符更改结果的顺序_Sql_Postgresql - Fatal编程技术网

Sql &&;运算符更改结果的顺序

Sql &&;运算符更改结果的顺序,sql,postgresql,Sql,Postgresql,为什么PostgreSQL 9.4的&&运算符用于检查两个数组的重叠,更改结果的顺序 我有一个问题 Select * FROM "View_Student_Plan" WHERE "ClassID" && ARRAY[53]:: bigint[] 我的观点是按入学日期排序的。 如果我用的话,效果很好 Select * FROM "View_Student_Plan" 但当我附加查询的剩余部分时,它会改变结果的顺序 我在where子句中使用了一些其他条件,如Studen

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

我有一个问题

Select *  FROM "View_Student_Plan" WHERE  "ClassID" && ARRAY[53]:: bigint[] 
我的观点是按入学日期排序的。 如果我用的话,效果很好

Select *  FROM "View_Student_Plan"
但当我附加查询的剩余部分时,它会改变结果的顺序


我在where子句中使用了一些其他条件,如
Student\u Name,如'p%',
,这样它就不会影响select语句给出的结果顺序。那么,对于
“ClassID”和&ARRAY[53]::bigint[]

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

强制执行特定订单的唯一方法(例如,通过入院日期)是使用
orderby
子句

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

SELECT * FROM YourView
ORDER BY....--THIS WILL WORK
当它位于视图内部时,它类似于:

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

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

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

强制执行特定订单的唯一方法(例如,通过入院日期)是使用
orderby
子句

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

SELECT * FROM YourView
ORDER BY....--THIS WILL WORK
当它位于视图内部时,它类似于:

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


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

如果您需要结果的特定顺序,您应该在查询中添加一个
orderby
子句。您不应该依赖于没有明确顺序的查询或视图的顺序。@macmoonshine,但如果我从“视图…”运行查询选择*,它就会正常工作。@Pooja-G它可能会,或者明天它可能不会。这种错误的假设非常强烈,sqlite甚至有一个pragma来反转选择顺序,只是为了让这些错误重新出现。如果某个内容未按规范排序,则无法依赖于该内容进行排序。这与&&无关,而与视图有关。例如,如果您需要结果的特定顺序,SQL Server甚至不允许按内部视图进行排序(与
TOP
语句结合使用除外),您应该在查询中添加一个
orderby
子句。您不应该依赖于没有明确顺序的查询或视图的顺序。@macmoonshine,但如果我从“视图…”运行查询选择*,它就会正常工作。@Pooja-G它可能会,或者明天它可能不会。这种错误的假设非常强烈,sqlite甚至有一个pragma来反转选择顺序,只是为了让这些错误重新出现。如果某项内容未按规范排序,则不能依赖于它进行排序。这与&&无关,与视图有关。例如,SQL Server甚至不允许内部视图中的
Order by
(除了与
TOP
语句结合使用)我使用的是Order by。“查看学生计划”是我的视图,该视图的查询包含order by子句。@Pooja-G
order by
需要位于查询的最后,否则它将被忽略。但是如果我运行查询,请从“查看…”中选择*然后它就正常工作了@Magnus@Pooja-我加了一些explanation@Pooja-G:查询优化程序使用了许多不同的策略来提高性能,但其中一些(例如,将记录放入临时哈希表)将完全改变顺序。保证订单的唯一方法是在最终查询中输入一个
orderby
。如果您想知道Optimizer在做什么,请运行
EXPLAIN SELECT*FROM…
。我使用的是order by。“查看学生计划”是我的视图,该视图的查询包含order by子句。@Pooja-G
order by
需要位于查询的最后,否则它将被忽略。但是如果我运行查询,请从“查看…”中选择*然后它就正常工作了@Magnus@Pooja-我加了一些explanation@Pooja-G:查询优化程序使用了许多不同的策略来提高性能,但其中一些(例如,将记录放入临时哈希表)将完全改变顺序。保证订单的唯一方法是在最终查询中输入一个
orderby
。如果您想知道优化器在做什么,请运行
EXPLAIN SELECT*FROM…