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
PostgreSQL中WHERE的顺序;表"&引用;栏「;质疑_Sql_Postgresql_Sql Order By - Fatal编程技术网

PostgreSQL中WHERE的顺序;表"&引用;栏「;质疑

PostgreSQL中WHERE的顺序;表"&引用;栏「;质疑,sql,postgresql,sql-order-by,Sql,Postgresql,Sql Order By,在PostgreSQL中,是否执行此查询 SELECT "table".* FROM "table" WHERE "table"."column" IN (1, 5, 3) 始终按1,5,3顺序返回结果,还是不明确? 如果不明确,我如何正确地确保结果的顺序是1,5,3?WHERE子句不会以任何方式对结果排序,它只会选择匹配的记录,无论数据库索引以何种顺序找到它们 您必须添加ORDERBY子句。在true之前添加False orders SELECT "table".* FROM "table"

在PostgreSQL中,是否执行此查询

SELECT "table".* FROM "table" WHERE "table"."column" IN (1, 5, 3)
始终按
1,5,3
顺序返回结果,还是不明确?

如果不明确,我如何正确地确保结果的顺序是
1,5,3

WHERE子句不会以任何方式对结果排序,它只会选择匹配的记录,无论数据库索引以何种顺序找到它们


您必须添加ORDERBY子句。

在true之前添加False orders

SELECT "table".*
FROM "table"
WHERE "table"."column" IN (1, 5, 3)
order by
    "column" != 1,
    "column" != 5,
    "column" != 3

在select语句中添加如下内容

order by CASE WHEN "column"=1 THEN 1
              WHEN "column"=2 THEN 2
              ELSE 3
       END
如果您有三个以上的值,那么在select语句Postgre中使用“in”时,创建一个查找表并连接到查询中的查找表可能会更容易。只需根据该值范围返回匹配的行即可。这在任何方面都不含糊,但如果需要对结果进行排序,则需要通过“column1,column2…”显式添加顺序。

一个集合本身不知道顺序。A
SELECT
查询需要
orderby
返回已排序的行

其他答案建议使用
CASE
语句或布尔表达式,但这远远不够优雅,而且对于大型表来说效率很低。我建议在查询中使用数组逗号分隔字符串,而不是集合

对于给定的表:

CREATE TABLE tbl (col int);
使用阵列,其工作原理如下:

SELECT col
FROM   tbl
JOIN  (
   SELECT col, row_number() OVER () AS rn
   FROM   unnest('{1,5,3}'::int[]) AS col
   ) u USING (col)
ORDER  BY rn;
返回在输入数组序列中找到的所有行:

对于更多的细节和未来的证明代码,请考虑这个密切相关的问题:

或者dba.SE上的相应问题:

按情况订购时…
@bernie-如果这是一个副本,请提供一个链接,指向它的副本。抱歉。同意。我现在没有时间。我有大约20个值,但我能够很好地实现这个解决方案。谢谢