Pengendalian PostgreSQL Berbilang Fungsi Pengembalian Set dalam Penyata SELECT: Analisis Khusus Versi
Tingkah laku PostgreSQL apabila menghadapi berbilang fungsi pengembalian set dalam pernyataan SELECT
berbeza dengan ketara bergantung pada versi pangkalan data.
PostgreSQL 10 dan Kemudian:
Dalam versi 10 dan ke atas, fungsi ini dilaksanakan secara serentak. Output distrukturkan sedemikian rupa sehingga fungsi yang menghasilkan paling banyak baris menentukan jumlah bilangan baris dalam set hasil. Output fungsi yang lebih pendek dilapisi dengan nilai NULL
untuk mengekalkan penjajaran ini, dengan berkesan mencipta hasil seperti sambung silang.
PostgreSQL 9.6 dan Terdahulu:
Sebelum versi 9.6, hasilnya berbeza dengan ketara. Jumlah bilangan baris yang dijana bersamaan dengan gandaan sepunya terkecil (LCM) bagi kiraan baris daripada setiap fungsi pengembalian set. Ini boleh membawa kepada hasil yang tidak dapat diramalkan dan berkemungkinan tidak diingini, terutamanya apabila kiraan baris tidak berkongsi faktor yang sama.
Contoh Ilustrasi:
Mari kita periksa pertanyaan:
<code class="language-sql">SELECT generate_series(1, 3), generate_series(5, 7);</code>
Output PostgreSQL 10:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 NULL | NULL NULL | NULL NULL | NULL</code>
PostgreSQL 9.6- Output:
<code> generate_series | generate_series -----------------+----------------- 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7 1 | 5 2 | 6 3 | 7</code>
Pertimbangan Utama:
CASE
dan COALESCE
.LATERAL JOIN
dengan ROWS FROM (...)
amat disyorkan dan bukannya secara langsung memasukkan berbilang fungsi pengembalian set dalam senarai SELECT
.Dokumentasi Berkaitan:
Atas ialah kandungan terperinci Bagaimanakah Fungsi Pemulangan Berbilang Set Berkelakuan dalam Klausa SELECT PostgreSQL Merentasi Versi Berbeza?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!