Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mengekalkan Susunan Elemen Tatasusunan Apabila Menyertai Jadual PostgreSQL dengan Medan Tatasusunan?

Bagaimana untuk Mengekalkan Susunan Elemen Tatasusunan Apabila Menyertai Jadual PostgreSQL dengan Medan Tatasusunan?

Linda Hamilton
Linda Hamiltonasal
2024-12-27 07:49:10869semak imbas

How to Preserve Array Element Order When Joining PostgreSQL Tables with Array Fields?

Melaksanakan PostgreSQL JOIN dengan Array Type dan Memelihara Susunan Elemen Array

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn