Rumah >pangkalan data >tutorial mysql >Bagaimanakah Saya Boleh Panggil Fungsi Pengembalian Set dengan Cekap dengan Argumen Tatasusunan Berbilang Kali dalam PostgreSQL?

Bagaimanakah Saya Boleh Panggil Fungsi Pengembalian Set dengan Cekap dengan Argumen Tatasusunan Berbilang Kali dalam PostgreSQL?

Linda Hamilton
Linda Hamiltonasal
2024-12-26 12:32:10894semak imbas

How Can I Efficiently Call a Set-Returning Function with an Array Argument Multiple Times in PostgreSQL?

Memanggil Fungsi Pengembalian Set dengan Argumen Tatasusunan Berbilang Kali

Perbincangan ini berpusat di sekitar fungsi pengembalian set bernama foo yang boleh memproses tatasusunan data yang menggunakan parameter tertentu dan memberikan hasil yang mengandungi set baris dan lajur tambahan. Walaupun fungsi beroperasi dengan jayanya dengan satu set data, ia menghadapi cabaran apabila cuba memproses berbilang set data tanpa bergantung pada ID data untuk rujukan.

Pelbagai percubaan untuk mengubah suai sintaks, seperti menggunakan format berikut:

SELECT dataid, (foo(ARRAY_AGG(data)),1).*
FROM dataset
WHERE dataid = something -- only testing on 1
GROUP BY dataid

tidak berjaya, menyebabkan fungsi dipanggil berulang kali untuk setiap lajur.

Penyelesaian: Lateral Join

Dalam PostgreSQL versi 9.3 dan seterusnya, menggunakan binaan LEFT JOIN LATERAL biasanya menghasilkan hasil yang optimum:

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;

Sintaks ini memastikan bahawa semua baris ke sebelah kiri cantuman dikekalkan, walaupun fungsi foo tidak mengembalikan baris.

Jika foo sememangnya tidak boleh mengembalikan baris dan mengecualikan baris tersebut diingini, sintaks berikut boleh digunakan:

CROSS JOIN LATERAL foo(sub.arr)

atau versi ringkasnya:

, foo(sub.arr)

Pendekatan ini didokumenkan dalam PostgreSQL manual.

Atas ialah kandungan terperinci Bagaimanakah Saya Boleh Panggil Fungsi Pengembalian Set dengan Cekap dengan Argumen Tatasusunan Berbilang Kali 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