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 (
idtrong ví dụ), vì vậy chúng ta có thể kết hợp với mộtUSINGngắ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ử