PostgreSQL
 sql >> Datenbank >  >> RDS >> PostgreSQL

PostgreSQL konvertiert das von der Funktion zurückgegebene Array in Spalten

Können Sie eine Unterauswahl verwenden?

postgres=# select ar[1], ar[2] from (select string_to_array('a b c', ' ') ar) as sq;
 ar | ar 
----+----
 a  | b
(1 row)

Dies erfordert immer noch, dass Sie jede Spalte explizit extrahieren (wie Sie es bereits tun). Wenn das Array mehr Elemente enthält als extrahiert werden, gehen sie verloren, und wenn es weniger sind, sind die fehlenden Spalten einfach NULL .

EDIT:Ich denke, ich würde das Ganze in eine Unterauswahl packen; der innere Subselect erzeugt die gewünschten Zeilen , wobei die äußere Auswahl die innere Abfrage in die gewünschten Spalten projiziert :

SELECT subquery1.a, subquery1.b, subquery1.c, 
    myfunction_result[1], myfunction_result[2] 
FROM ( SELECT table1.a, table1.b, table1.c,
              MyFunction(table1.a, table1.b, table1.c) as myfunction_result
       FROM table1 INNER JOIN table2 using(b) 
       WHERE ... GROUP BY table1.a, table1.b, table1.c
) AS subquery1;

Die inneren und äußeren Auswahlen korrelieren korrekt mit table1 Referenzen.