Sie rufen unnest
auf 3 mal auf FROM
-Klausel, das heißt, Sie machen einen CROSS JOIN
(kartesisches Produkt) der 3.
Wenn Sie PostgreSQL 9.4 oder höher verwenden, können Sie einfach einen Aufruf von unnest
ausführen Geben Sie jedes Array als Eingabe:
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)
Eine weitere Option für jede Version besteht darin, den Aufruf unnest
hinzuzufügen in SELECT
statt 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
In beiden Fällen, besonders aber im letzten, müssen Sie sicher sein, dass jedes Array genau die gleiche Anzahl von Elementen hat. Wenn dies bei der ersten Methode nicht der Fall ist, wird jede fehlende Zeile als NULL gefüllt, aber bei der zweiten werden so viele Zeilen zurückgegeben, wie der LCM der Anzahl der Zeilen, die von jedem zurückgegeben werden, was Sie wahrscheinlich nicht wollen. Beispiel:
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)
Überprüfen Sie die Dokumentation zu Aufrufen von Tabellenfunktionen für weitere Informationen.