Trong Postgres 9.4 trở lên, đây là đơn giản nhất và nhanh nhất :
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
đã được giới thiệu trong Postgres 9.4. -
Không cần truy vấn con, chúng ta có thể sử dụng trực tiếp hàm set-return giống như một bảng. (A.k.a. "table-function".)
-
Một chuỗi ký tự để đưa vào mảng thay vì một hàm tạo ARRAY có thể dễ triển khai hơn với một số ứng dụng khách.
-
Để thuận tiện (tùy chọn), hãy sao chép tên cột mà chúng tôi đang tham gia vào (
id
trong ví dụ), vì vậy chúng ta có thể kết hợp với mộtUSING
ngắn gọn mệnh đề chỉ nhận được một phiên bản duy nhất của cột nối trong kết quả. -
Hoạt động với bất kỳ kiểu đầu vào. Nếu cột khóa của bạn thuộc loại
text
, cung cấp một cái gì đó như'{foo,bar,baz}'::text[]
.
Giải thích chi tiết:
- PostgreSQL unnest () với số phần tử