ด้วยPostgres 9.4สิ่งนี้สามารถทำให้สั้นลงได้เล็กน้อย:
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;
หรือเพิ่มขนาดกะทัดรัดขึ้นอีกเล็กน้อยโดยไม่มีตารางที่ได้รับ:
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
การลบความจำเป็นในการกำหนด / รักษาตำแหน่งให้กับแต่ละค่าด้วยตนเอง
ด้วยPostgres 9.6สิ่งนี้สามารถทำได้โดยใช้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 ถูกใช้เพื่อให้รายการค่าต้องถูกระบุเพียงครั้งเดียว หากไม่สำคัญสิ่งนี้สามารถเขียนเป็น:
select c.*
from comments c
where id in (42,48,43)
order by array_position(array[42,48,43], c.id);