PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

मैं सीधे jsonb_array_elements पर क्वेरी क्यों नहीं कर सकता?

जैसा कि त्रुटि संदेश कहता है, WHERE . के लिए तर्क एक सेट वापस नहीं करना चाहिए। jsonb_array_elements एक सेट देता है और इसकी तुलना किसी एक मान से नहीं की जा सकती। दूसरी क्वेरी में आपके पास चयन के अंदर एक क्रॉस जॉइन है और जो इसे WHERE का उपयोग करने के लिए उपयुक्त परिणाम में परिवर्तित करता है। चालू।

आप इसे इस तरह भी कर सकते हैं

SELECT mydata.pk FROM mydata
  WHERE 'Bob' in (SELECT jsonb_array_elements(mydata.data->'people')->>'name');

यहां उप-चयन आपको IN . का उपयोग करने की अनुमति देगा वांछित मूल्य खोजने के लिए ऑपरेटर क्योंकि परिणाम अब एक सेट नहीं है।

दूसरा तरीका सीधे jsonb को क्वेरी करना है

SELECT mydata.pk FROM mydata
  WHERE mydata.data->'people' @> '[{"name":"Bob"}]'::jsonb;

इस तरह आपको jsonb को एक परिणामसेट में बदलने और उसमें खोजने की आवश्यकता नहीं है।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. नाइटवॉच कस्टम कमांड कॉलबैक

  2. विशेष को छोड़कर, अन्य सभी के बाद शून्य मानों को क्रमबद्ध करना

  3. पीएल/पीजीएसक्यूएल फ़ंक्शन:निष्पादन कथन का उपयोग करके एकाधिक कॉलम के साथ सामान्य तालिका कैसे वापस करें

  4. क्लाजों के अनुसार समूह होना - एलीन का जनरल बिट्स

  5. PostgreSQL में डेटस्टाइल कैसे बदलें?