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
Lepaskan: 2024-12-27 07:49:10
asal
792 orang telah melayarinya

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 = ?
Salin selepas log masuk

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 = ?])
Salin selepas log masuk

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
Salin selepas log masuk

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!

sumber:php.cn
Kenyataan Laman Web ini
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan