sql >> Databáze >  >> RDS >> PostgreSQL

Zploštění vztahu s polem tak, aby se vydával jeden řádek na položku pole

Můžeme vložit funkci vracení sady unnest() do SELECT seznam jak navrhuje Raphaël . Před Postgresem 10 se takto projevovaly problémy s rohovými pouzdry. Viz:

Od Postgres 9.3 můžeme také použít LATERAL připojit se k tomu. Je to čistší způsob, který vyhovuje standardům, jak vložit funkce vracející sadu do FROM seznamu, nikoli do SELECT seznam:

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

Jeden nepatrný rozdíl:tím se zbaví řádků s prázdnými / NULL values z výsledku od unnest() vrátí žádný řádek , zatímco stejný je převeden na hodnotu NULL v FROM seznam a stejně se vrátil. 100% ekvivalentní dotaz je:

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

Viz:



  1. Jak připojit Airflow k databázi Oracle

  2. Třídit tabulku pomocí smyčky v MySQL s SELECT a UPDATE

  3. Nativní Clustering ProxySQL s Kubernetes

  4. Inteligentní MySQL GROUP BY pro streamy aktivit