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: