PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Извикване на функция за връщане на набор с аргумент на масив няколко пъти

В Postgres 9.3 или по-нова версия обикновено е най-добре да използвате 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;

Ако функцията foo() може да върне няма редове , това е безопасната форма, тъй като запазва всички редове отляво на съединението, дори когато нито един ред не е върнат вдясно.

Иначе или ако искате за да изключите редове без резултат от страничното свързване, използвайте:

CROSS JOIN LATERAL foo(sub.arr)

или стенография:

, foo(sub.arr)

Има изрично споменаване в ръководството.

Свързаният отговор на Крейг (посочен от Даниел) се актуализира съответно:

  • Как да избегнем множество функции eval със синтаксиса (func()).* в SQL заявка?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PostGIS в действие

  2. Intel SSD, вече извън списъка на sh..err, sramed list

  3. Създайте PostgreSQL база данни в движение, като използвате Hibernate, дори ако DB не съществува

  4. какво е @JoinColumn и как се използва в Hibernate

  5. Как Atan() работи в PostgreSQL