在Postgres中使用WHERE...ANY
样式查询按给定数组排序结果时,是否有一个技巧?即:
SELECT *
FROM table
WHERE id = ANY (<idsInDesiredOrder>)
答案 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