Tach!
kann mir jemand erklären oder Hinweise geben, wieso das Verhalten der folgenden 2 Queries so ist, wie es ist?
Die Dokumentationslage zu unnest() ist nicht besonders toll, aber vermutlich ist unnest() hier nicht weiter für das Ergebnis verantwortlich. Das wird wohl an den Eigenheiten PostgreSQLs liegen, wie es unterschiedlich große Datenmengen verknüpft.
select unnest(array[1,2]), unnest(array[3,4]);
unnest | unnest
--------+--------
1 | 3
2 | 4
(2 Zeilen)
Zumindest sieht es so aus, als ob gleich große Datenmengen quasi im Reißverschlussprinzip verbunden werden.
select unnest(array[1,2]), unnest(array[3,4,5]);
unnest | unnest
--------+--------
1 | 3
2 | 4
1 | 5
2 | 3
1 | 4
2 | 5
(6 Zeilen)
Das klappt bei unterschiedlich großen Mengen nicht so gut. Und eigentlich ist es auch üblich, beim Verbinden ohne weitere Kriterien ein kartesisches Produkt zu bilden, also jeden mit jedem zu verheiraten, so wie das hier geschehen ist.
Warum werden im 2. Fall alle Möglichkeiten aufgelöst und warum im 1. nicht?
Tja, die Antwort dazu vermute ich mal in Richtung Joins zu finden.
dedlfix.