PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Panggil fungsi pengembalian set dengan argumen array beberapa kali

Di Postgres 9.3 atau yang lebih baru, biasanya yang terbaik adalah menggunakan 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;

Jika fungsi foo() dapat mengembalikan tanpa baris , itu bentuk aman karena mempertahankan semua baris di sebelah kiri gabungan, meskipun tidak ada baris yang dikembalikan ke kanan.

Lain, atau jika Anda mau untuk mengecualikan baris tanpa hasil dari gabungan lateral, gunakan:

CROSS JOIN LATERAL foo(sub.arr)

atau singkatan:

, foo(sub.arr)

Ada penyebutan eksplisit dalam manual.

Jawaban terkait Craig (direferensikan oleh Daniel) diperbarui sesuai:

  • Bagaimana cara menghindari beberapa evaluasi fungsi dengan sintaks (func()).* dalam kueri 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. SQL Transpose Baris sebagai Kolom

  2. Perintah PostgreSQL VALUES Dijelaskan

  3. Batasan kunci asing yang kompleks di SQLAlchemy

  4. Bagaimana KECUALI Bekerja di PostgreSQL

  5. Django cache.set() menyebabkan kesalahan kunci duplikat