आपके प्रश्न का उत्तर देने के लिए:हाँ यह संभव है और आपकी क्वेरी ठीक यही करती है। हम इसे foo
में तीसरी पंक्ति शुरू करके साबित कर सकते हैं। तालिका:http://sqlfiddle.com/#!15/06dfe/2
आपकी समस्या LEFT JOIN
के साथ नहीं है करने के लिए json_array_elements
लेकिन निहित पार्श्व क्रॉस के साथ शामिल हों। आपकी क्वेरी इसके बराबर है:
SELECT *
FROM foo
CROSS JOIN LATERAL json_array_elements (foo.bars :: json) foo_bars
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;
http://sqlfiddle.com/#!15/06dfe/5
आप जो चाहते हैं, वह foo
. के बीच एक पार्श्व बाईं ओर जुड़ना है और json_array_elements
:
SELECT *
FROM foo LEFT JOIN LATERAL
json_array_elements (foo.bars :: json) foo_bars ON true
LEFT OUTER JOIN bar ON (foo_bars ->> 'id') :: BIGINT = bar.ID;
http://sqlfiddle.com/#!15/06dfe/6