Kita dapat menempatkan fungsi pengembalian set unnest()
ke dalam SELECT
daftar seperti yang disarankan Raphaël
. Ini digunakan untuk menunjukkan masalah kasus sudut sebelum Postgres 10. Lihat:
Sejak Postgres 9.3 kita juga dapat menggunakan LATERAL
bergabung untuk ini. Ini adalah cara yang lebih bersih dan sesuai standar untuk menempatkan fungsi pengembalian-set ke dalam FROM
daftar, bukan ke dalam SELECT
daftar:
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
Satu perbedaan halus:ini menjatuhkan baris dengan values
kosong / NULL dari hasil sejak unnest()
mengembalikan tidak ada baris , sedangkan yang sama dikonversi ke nilai NULL di FROM
daftar dan tetap kembali. Kueri yang setara 100% adalah:
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Lihat: