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

Volejte funkci vracející sadu s argumentem pole vícekrát

V Postgresu 9.3 nebo novějším je obvykle nejlepší použít LEFT JOIN LATERAL ... ON true :

SELECT sub.dataid, f.*
FROM  (
   SELECT dataid, array_agg(data) AS arr
   FROM   dataset
   WHERE  dataid = something
   GROUP  BY 1
   ) sub
LEFT   JOIN LATERAL foo(sub.arr) f ON true;

Pokud je funkce foo() může vrátit žádné řádky , jedná se o bezpečný formulář, protože zachovává všechny řádky nalevo od spojení, i když není vrácen žádný řádek vpravo.

Jinak, nebo chcete-li chcete pro vyloučení řádků bez výsledku z bočního spojení použijte:

CROSS JOIN LATERAL foo(sub.arr)

nebo zkratka:

, foo(sub.arr)

V manuálu je výslovná zmínka.

Související Craigova odpověď (odkazovaná Danielem) je odpovídajícím způsobem aktualizována:

  • Jak se vyhnout vícenásobným hodnotám funkcí pomocí syntaxe (func()).* v dotazu SQL?


  1. ORA-12728:neplatný rozsah v regulárním výrazu

  2. Jak vložit data na SQL Server

  3. Připojení k Microsoft Access v IRI Workbench

  4. import CSV do phpmyadmin