Với Postgres 9.4, điều này có thể được thực hiện ngắn hơn một chút:
select c.*
from comments c
join (
select *
from unnest(array[43,47,42]) with ordinality
) as x (id, ordering) on c.id = x.id
order by x.ordering;
Hoặc nhỏ gọn hơn một chút mà không có bảng dẫn xuất:
select c.*
from comments c
join unnest(array[43,47,42]) with ordinality as x (id, ordering)
on c.id = x.id
order by x.ordering
Loại bỏ sự cần thiết phải tự gán / duy trì một vị trí cho từng giá trị.
Với Postgres 9.6, điều này có thể được thực hiện bằng cách sử dụng array_position()
:
with x (id_list) as (
values (array[42,48,43])
)
select c.*
from comments c, x
where id = any (x.id_list)
order by array_position(x.id_list, c.id);
CTE được sử dụng để danh sách các giá trị chỉ cần được chỉ định một lần. Nếu điều đó không quan trọng thì điều này cũng có thể được viết là:
select c.*
from comments c
where id in (42,48,43)
order by array_position(array[42,48,43], c.id);