PostgreSQL:WHERE id = ANY(idsArray) - 按idsArray排序结果

时间:2017-11-23 12:07:22

标签: database postgresql

在Postgres中使用WHERE...ANY样式查询按给定数组排序结果时,是否有一个技巧?即:

SELECT *
FROM table
WHERE id = ANY (<idsInDesiredOrder>)

3 个答案:

答案 0 :(得分:2)

也许array_position可以帮到你:

ngForm

答案 1 :(得分:2)

正如Marc所说,SQL永远不会保证在没有ORDER BY子句的情况下进行排序。从历史上看,这样的情况在Postgres中是有问题的,因为你不能写一个引用数组索引的ORDER BY

他们在9.4中通过为set-returns函数调用添加WITH ORDINALITY子句来解决这个问题,允许你将数组解压缩到“values”列和“index”列:

SELECT * FROM table
JOIN UNNEST(<preSortedIds>) WITH ORDINALITY u(id,pos) USING (id)
ORDER BY pos

答案 2 :(得分:0)

在SQL中,当您想要订购结果时,必须使用&#34; ORDER BY&#34;条款。否则结果将以不可预测的顺序排列。所以将查询重写为

SELECT *
FROM table
WHERE id = ANY (<preSortedIds>)
ORDER BY id