PostgreSQL
 sql >> Baza danych >  >> RDS >> PostgreSQL

Spłaszczanie relacji z tablicą w celu wyemitowania jednego wiersza na wpis tablicy

Możemy umieścić funkcję zwracającą zestaw unnest() do SELECT lista jak sugeruje Raphaël . Wykazywało to problemy ze sprawami narożnymi przed Postgresem 10. Zobacz:

Od Postgresa 9.3 możemy również użyć LATERAL przyłączyć się do tego. Jest to czystszy, zgodny ze standardami sposób umieszczania funkcji zwracających zestaw w FROM listy, a nie do SELECT lista:

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

Jedna subtelna różnica:usuwa wiersze z pustymi / NULL values z wyniku od unnest() zwraca brak wiersza , podczas gdy to samo jest konwertowane na wartość NULL w FROM listę i mimo to wrócił. W 100% równoważne zapytanie to:

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

Zobacz:



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. postgresql łączenie kilku okresów w jeden

  2. NULL utracone elementy podczas rzutowania wyniku unnest()

  3. Dołączanie zagnieżdżonej tablicy Postgres jsonb

  4. Wyodrębnij datę (rrrr/mm/dd) ze znacznika czasu w PostgreSQL

  5. Zmienna tabeli PostgreSQL