Masalah:
Dapatkan semula data daripada jadual item, mengekalkan susunan elemen dalam medan jenis tatasusunan dalam jadual some_chosen_data_in_order untuk sesuatu tertentu baris.
Percubaan #1: SERTAI
SELECT I.* FROM items AS I JOIN some_chosen_data_in_order AS S ON I.id = ANY(S.id_items) WHERE S.id = ?
Percubaan #2: Subquery
SELECT I.* FROM items AS I WHERE I.id = ANY (ARRAY[SELECT S.id_items FROM some_chosen_data_in_order WHERE id = ?])
Mana-mana pendekatan ini tidak mengekalkan susunan unsur dalam tatasusunan.
Penyelesaian:
SELECT t.* FROM unnest(ARRAY[1,2,3,2,3,5]) item_id LEFT JOIN items t on t.id=item_id
Pertanyaan ini membuka sarang tatasusunan ke dalam baris individu, mengekalkan susunan elemen. Ia kemudiannya menggabungkan item yang terhasil dengan jadual item berdasarkan medan id.
Contoh:
ID | items_data |
---|---|
1 | {2,4,233,5} |
Pertanyaan di atas akan mengembalikan hasil berikut:
id | data |
---|---|
2 | foo |
4 | bar |
233 | baz |
5 | qux |
Penjelasan:
Fungsi unnest membongkar tatasusunan ke dalam jadual dengan satu baris setiap elemen. LEFT JOIN memastikan semua item daripada tatasusunan dikembalikan, termasuk yang tidak mempunyai baris yang sepadan dalam jadual item.
Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Susunan Elemen Tatasusunan Apabila Menyertai Jadual PostgreSQL dengan Medan Tatasusunan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!