我有主键列表/数组,现在我需要执行SQL查询以从表中获取与它们在数组中出现的顺序完全相同的顺序。例如:
| id | text |
| 1 | random data 1 |
| 2 | random data 2 |
| 3 | random data 3 |
| 4 | random data 4 |
此查询:
select * from sample where id in (2,4,1)
应该返回行:
| 2 | random data 2 |
| 4 | random data 4 |
| 1 | random data 1 |
在PostgreSQL 9.3中执行此操作的最佳方法是什么?
答案 0 :(得分:1)
一种方式:
SELECT t.id, t.text
FROM (
SELECT *, row_number() OVER () AS rn
FROM (
SELECT unnest('{2,4,1}'::int[]) AS id
) x
) y
JOIN tbl t USING (id)
ORDER BY rn
诀窍是在ORDER BY
之后将window function row_number()
的行号用于JOIN
。{
查找更多方法(更安全的方法),详细解释和此closely related question on dba.SE下的链接。