PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Gọi một hàm trả về tập hợp với một đối số mảng nhiều lần

Trong Postgres 9.3 trở lên, thường tốt nhất là sử dụng 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;

Nếu hàm foo() có thể trả về không có hàng nào , đó là biểu mẫu an toàn vì nó bảo toàn tất cả các hàng ở bên trái của phép nối, ngay cả khi không có hàng nào được trả về bên phải.

Khác, hoặc nếu bạn muốn để loại trừ các hàng không có kết quả từ phép nối bên, hãy sử dụng:

CROSS JOIN LATERAL foo(sub.arr)

hoặc viết tắt:

, foo(sub.arr)

Có một đề cập rõ ràng trong sách hướng dẫn.

Câu trả lời liên quan của Craig (do Daniel tham khảo) được cập nhật tương ứng:

  • Làm cách nào để tránh nhiều lần trốn tránh hàm với cú pháp (func ()). * trong truy vấn 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. Làm cách nào để xử lý việc mở / đóng kết nối Db trong ứng dụng Go?

  2. chú thích ngủ đông thích hợp cho byte []

  3. PostgreSQL:Loại dữ liệu nào nên được sử dụng cho Tiền tệ?

  4. Lỗi khi tạo tiện ích mở rộng không phù hợp trên PostgreSQL

  5. Tìm hiểu về kích thước hàng Postgres