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()で行番号を適用することです。dba.SE のこの密接に関連する質問 の下で、より多くの方法 (とりわけより安全な方法)、詳細な説明、およびリンクを見つけてください。ORDER BYJOIN

于 2013-02-05T22:00:02.013 に答える