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)

मैनुअल में एक स्पष्ट उल्लेख है।

क्रेग का संबंधित उत्तर (डैनियल द्वारा संदर्भित) तदनुसार अपडेट किया गया है:

  • एक SQL क्वेरी में (func()).* सिंटैक्स के साथ कई फ़ंक्शन evals से कैसे बचें?


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Ubuntu 18.04 पर PostgreSQL स्थापित करें

  2. varchar के लिए array_agg () का उपयोग कैसे करें []

  3. त्रुटि कैसे ठीक करें:कॉलम c.relhasoids Postgres में मौजूद नहीं है?

  4. प्रदर्शन अंतर:INNER JOIN बनाम WHERE क्लॉज पर रखी गई शर्त

  5. समूहवार अधिकतम क्वेरी अनुकूलित करें