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 से कैसे बचें?