Vi kan använda set-returning-funktionen unnest()
i SELECT
lista som Raphaël föreslår
. Detta brukade visa problem med hörnfodral före Postgres 10. Se:
Sedan Postgres 9.3 kan vi också använda en LATERAL
gå med för detta. Det är det renare, standardkompatibla sättet att lägga in set-returfunktioner i FROM
listan, inte i SELECT
lista:
SELECT name, value
FROM tbl, unnest(values) value; -- implicit CROSS JOIN LATERAL
En subtil skillnad:detta släpper rader med tomma / NULL values
från resultatet sedan unnest()
returnerar ingen rad , medan detsamma konverteras till ett NULL-värde i FROM
lista och returnerade ändå. Den 100 % motsvarande frågan är:
SELECT t.name, v.value
FROM tbl t
LEFT JOIN unnest(t.values) v(value) ON true;
Se: