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);
सीटीई का उपयोग किया जाता है ताकि मूल्यों की सूची को केवल एक बार निर्दिष्ट करने की आवश्यकता हो। यदि यह महत्वपूर्ण नहीं है, तो यह भी लिखा जा सकता है:
select c.*
from comments c
where id in (42,48,43)
order by array_position(array[42,48,43], c.id);