Rumah > pangkalan data > tutorial mysql > Bagaimana untuk Memanggil Fungsi Pengembalian Set Berbilang Kali dengan Argumen Tatasusunan dalam PostgreSQL?

Bagaimana untuk Memanggil Fungsi Pengembalian Set Berbilang Kali dengan Argumen Tatasusunan dalam PostgreSQL?

Linda Hamilton
Lepaskan: 2024-12-31 17:27:10
asal
237 orang telah melayarinya

How to Call a Set-Returning Function Multiple Times with Array Arguments in PostgreSQL?

Memanggil Fungsi Pengembalian Set dengan Argumen Tatasusunan Berbilang Kali

Anda mempunyai fungsi yang memproses tatasusunan baris dengan parameter dan mengembalikan set baris dengan lajur tambahan.

Soalan: Bagaimanakah anda boleh memanggil fungsi ini beberapa kali pada kumpulan data yang berbeza tanpa menghantar dataid kepada fungsi?

Jawapan:

Dalam Postgres 9.3 atau lebih baru, gunakan KIRI JOIN LATERAL ... PADA sintaks benar:

SELECT sub.dataid, f.*
FROM  (
   SELECT dataid, array_agg(data) AS arr
   FROM   dataset
   WHERE  dataid = something
   GROUP  BY 1
   ) sub
LEFT   JOIN LATERAL foo(sub.arr) f ON true;
Salin selepas log masuk

Jika fungsi foo() tidak boleh mengembalikan baris, borang ini akan mengekalkan semua baris di sebelah kiri cantuman, walaupun tiada baris dikembalikan ke kanan.

Jika fungsi tidak dapat mengembalikan tiada baris atau jika anda ingin mengecualikan baris tanpa hasil daripada cantuman sisi, gunakan :

CROSS JOIN LATERAL foo(sub.arr)
Salin selepas log masuk

Sebagai alternatif, anda boleh menggunakan trengkas:

, foo(sub.arr)
Salin selepas log masuk

Kaedah ini disyorkan untuk Postgres 9.3 dan kemudian. Untuk versi terdahulu, rujuk kepada penyelesaian lain yang tersedia.

Atas ialah kandungan terperinci Bagaimana untuk Memanggil Fungsi Pengembalian Set Berbilang Kali dengan Argumen Tatasusunan dalam PostgreSQL?. 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