sql >> Database >  >> RDS >> PostgreSQL

Een relatie met een array afvlakken om één rij per array-invoer uit te zenden

We kunnen de set-retourfunctie unnest() in de SELECT list zoals Raphaël suggereert . Dit vertoonde problemen met hoekkasten vóór Postgres 10. Zie:

Sinds Postgres 9.3 kunnen we ook een gebruiken LATERAL doe hiervoor mee. Het is de schonere, standaardconforme manier om set-return-functies in de FROM . te plaatsen lijst, niet in de SELECT lijst:

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

Een subtiel verschil:dit laat rijen met lege / NULL values vallen van het resultaat sinds unnest() retourneert geen rij , terwijl hetzelfde wordt geconverteerd naar een NULL-waarde in de FROM lijst en toch teruggestuurd. De 100 % equivalente zoekopdracht is:

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

Zie:



  1. Het totale aantal gewerkte uren op een dag weergeven mysql

  2. bulksgewijs wijzigen van kolomtypes in MySQL

  3. RuntimeError met mysql2 en rails3 (bundelaar)

  4. psql retourneert 'anoniem' in resultatenarray