JOIN LATERAL
के साथ एक अलग, साफ तरीका आजमाएं :
select b.id, t.rn
, t.account->>'name' AS name
, t.account->>'balance' AS balance
FROM bank_accounts b
LEFT JOIN LATERAL jsonb_array_elements(b.bank_accounts)
WITH ORDINALITY AS t (account, rn) ON true;
यदि आप bank_accounts
. में रिक्त या शून्य मानों वाली पंक्तियों की परवाह नहीं करते हैं, तो , एक आसान CROSS JOIN
का उपयोग करें :
select b.id, t.rn
, t.account->>'name' AS name
, t.account->>'balance' AS balance
FROM bank_accounts b
, jsonb_array_elements(b.bank_accounts) WITH ORDINALITY AS t (account, rn);
आपकी समस्या का मुख्य तत्व है WITH ORDINALITY
जो सेट-रिटर्निंग फ़ंक्शंस के लिए फ्लाई पर पंक्ति संख्या उत्पन्न करता है। इसे Postgres 9.4 के साथ पेश किया गया था - आपके लिए काम करता है, jsonb
9.4 के साथ भी पेश किया गया था।
वे प्रति अंतर्निहित पंक्ति अद्वितीय हैं। संपूर्ण तालिका में अद्वितीय होने के लिए, id
जोड़ें अंतर्निहित तालिका का।
WITH ORDINALITY
. के लिए विवरण :
संबंधित:
- JSON प्रकार के अंदर सरणी तत्वों के लिए क्वेरी
- एक साधारण json(b) int array को एक पूर्णांक में कैसे बदलें[] PostgreSQL 9.4+ में