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!