PostgreSQL中WHERE的顺序;表"&引用;栏「;质疑
在PostgreSQL中,是否执行此查询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"
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…”显式添加顺序。一个集合本身不知道顺序。ASELECT
查询需要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个值,但我能够很好地实现这个解决方案。谢谢