4

我有主键的列表/数组,现在我需要执行 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 中最好的方法是什么?

4

1 回答 1

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

诀窍是使用窗口函数row_number()应用行号,您可以ORDER BYJOIN. 在 dba.SE 上
这个密切相关的问题下找到更多方法(一种更安全的方法)、详细解释和链接。

于 2013-02-05T22:00:02.013 回答