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
Lepaskan: 2024-12-26 12:32:10
asal
887 orang telah melayarinya

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

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

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

atau versi ringkasnya:

, foo(sub.arr)
Salin selepas log masuk

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!

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