2013-02-05 98 views
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的最佳方式?

+0

順便說一句,Postgres 9.3還不存在。當前版本是9.2 –

回答

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 

訣竅是應用與window function row_number()行號,你可以在JOIN使用後ORDER BY
尋找更多的方式(其中更安全),詳細的解釋和鏈接在這closely related question on dba.SE

相關問題