sql >> Database teknologi >  >> RDS >> PostgreSQL

Udfladning af en relation med en matrix for at udsende én række pr. matrixindgang

Vi kan sætte sæt-retur-funktionen unnest() ind i SELECT liste som Raphaël foreslår . Dette plejede at udstille problemer med hjørnehus før Postgres 10. Se:

Siden Postgres 9.3 kan vi også bruge en LATERAL være med til dette. Det er den renere, standard-kompatible måde at indsætte sæt-returnerende funktioner i FROM listen, ikke i SELECT liste:

SELECT name, value
FROM   tbl, unnest(values) value;  -- implicit CROSS JOIN LATERAL

Én subtil forskel:dette taber rækker med tomme / NULL values fra resultatet siden unnest() returnerer ingen række , mens den samme konverteres til en NULL-værdi i FROM liste og returneres alligevel. Den 100 % tilsvarende forespørgsel er:

SELECT t.name, v.value
FROM   tbl t
LEFT   JOIN unnest(t.values) v(value) ON true;

Se:



  1. Kan ikke indlæse DLL "OraOps10.dll"

  2. Indstilling af Identitet til til eller fra i SQL-server

  3. SUM med et pivot for at beregne den samlede score

  4. simpel tilfældig prøveudtagning, mens data trækkes fra lager (oracle-motor) ved hjælp af proc sql i sas