Ini bukan tentang unnest seperti itu, tetapi tentang penanganan PostgreSQL yang sangat aneh dari beberapa fungsi pengembalian set di SELECT
daftar. Mengatur fungsi pengembalian di SELECT
bukan bagian dari standar SQL ANSI.
Anda akan menemukan perilaku yang jauh lebih waras dengan LATERAL
kueri, yang harus lebih disukai daripada menggunakan fungsi pengembalian set di FROM
sebanyak mungkin:
select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
misalnya
regress=> select a, b FROM unnest(array[1,2]) a, LATERAL unnest(array[1,2,3]) b;
a | b
---+---
1 | 1
1 | 2
1 | 3
2 | 1
2 | 2
2 | 3
(6 rows)
Satu-satunya waktu saya masih menggunakan beberapa fungsi pengembalian set di SELECT
adalah ketika saya ingin memasangkan nilai dari fungsi yang keduanya mengembalikan jumlah baris yang sama. Kebutuhan untuk itu akan hilang dalam 9.4, dengan multi-argumen unnest
dan dengan dukungan untuk WITH ORDINALITY
.