В Postgres 9.4 или по-късно, това енай-просто и най-бързо :
SELECT c.*
FROM comments c
JOIN unnest('{1,3,2,4}'::int[]) WITH ORDINALITY t(id, ord) USING (id)
ORDER BY t.ord;
-
WITH ORDINALITY
беше въведен с в Postgres 9.4. -
Няма нужда от подзаявка, можем да използваме функцията за връщане на набор като таблица директно. (известен още като "функция на таблица".)
-
Низовият литерал за предаване на масива вместо конструктор на ARRAY може да е по-лесен за изпълнение с някои клиенти.
-
За удобство (по избор), копирайте името на колоната, към която се присъединяваме (
id
в примера), така че можем да се присъединим с кратъкUSING
клауза, за да получите само един екземпляр на колоната за присъединяване в резултата. -
Работи с всякакви тип вход. Ако вашата ключова колона е от тип
text
, осигурете нещо като'{foo,bar,baz}'::text[]
.
Подробно обяснение:
- PostgreSQL unnest() с номер на елемент