sql >> Databasteknik >  >> RDS >> PostgreSQL

Platta ut en relation med en array för att avge en rad per arraypost

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:



  1. Mysql INTE IN och INTE FINNS samma sak?

  2. Hur ställer jag in replikering från MySQL till MongoDB?

  3. Vad betyder dubbla streck (||) i SQL?

  4. 2 sätt att återvända Julian Day i SQLite