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
Linda Hamiltonasal
2024-12-31 17:27:10252semak imbas

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;

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)

Sebagai alternatif, anda boleh menggunakan trengkas:

, foo(sub.arr)

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!

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