Anda memanggil unnest
3 kali di FROM
klausa, itu berarti Anda melakukan CROSS JOIN
(produk kartesius) dari 3.
Jika Anda menggunakan PostgreSQL 9.4 atau lebih tinggi, Anda dapat dengan mudah melakukan satu panggilan unnest
memberikan setiap array sebagai input:
select * from
unnest(
array['2001622', '2001624', '2007903'],
array[15,14,8],
array['type1', 'type1', 'type1'],
array[false, true, true]
) as u(id, ver, type, enabled)
Opsi lain, untuk versi apa pun, adalah menambahkan panggilan ke unnest
di SELECT
bukannya FROM
:
select
unnest(array['2001622', '2001624', '2007903']) as id,
unnest(array[15,14,8]) as ver,
unnest(array['type1', 'type1', 'type1']) as type,
unnest(array[false, true, true]) as enabled
Dalam kedua kasus, tetapi khusus pada yang terakhir, Anda harus yakin setiap array memiliki jumlah elemen yang sama persis. Jika tidak pada metode pertama, setiap baris yang hilang akan diisi sebagai NULL, tetapi yang kedua akan mengembalikan baris sebanyak KPK dari jumlah baris yang dikembalikan oleh masing-masing, apa yang mungkin tidak Anda inginkan. Contoh:
SELECT * FROM unnest(array[1,2,3,4], array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
[null] | e
[null] | f
(6 rows)
SELECT unnest(array[1,2,3,4]), unnest(array['a','b','c','d','e','f']);
unnest | unnest
--------+--------
1 | a
2 | b
3 | c
4 | d
1 | e
2 | f
3 | a
4 | b
1 | c
2 | d
3 | e
4 | f
(12 rows)
Periksa dokumentasi di panggilan fungsi tabel untuk informasi lebih lanjut.