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

JSON सरणी डेटा फ़ील्ड के भीतर डेटा क्वेरी करना

json_array_elements(...) एक सेट देता है, और इसी तरह ->> . को लागू करने का परिणाम होता है और = सेट को। ध्यान दें:

regress=> select json_array_elements('[{"name": "foo", "account_id": "123"}, {"name": "bar", "account_id": "321"}]') ->> 'account_id' = '123';
 ?column? 
----------
 t
 f
(2 rows)

आप केवल '123' = ANY (...) write लिखने में सक्षम होने की अपेक्षा करेंगे लेकिन यह दुर्भाग्य से एक सरणी इनपुट के बिना समर्थित नहीं है। हैरानी की बात है, न तो '123' IN (...) . है , कुछ ऐसा जो मुझे लगता है कि हमें ठीक करना होगा।

इसलिए, मैं LATERAL का उपयोग करूंगा . यहां एक तरीका दिया गया है, जो एक से अधिक मिलान होने पर कंपनी आईडी को कई बार लौटाएगा:

CREATE TABLE company AS SELECT 1 AS id, '[{"name": "foo", "account_id": "123"}, {"name": "bar", "account_id": "321"}]'::json AS accounts;

SELECT id 
FROM company c,
LATERAL json_array_elements(c.accounts) acc 
WHERE acc ->> 'account_id' = '123';



  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. लिक्विबेस में PostgreSQL चेक बाधा

  4. टी-एसक्यूएल (एसक्यूएल सर्वर) संग्रहीत प्रक्रिया को पीजीएसक्यूएल (पोस्टग्रे एसक्यूएल) में बदलने के लिए उपकरण

  5. PostgreSQL में "त्रुटि:प्रत्येक INTERSECT क्वेरी में समान संख्या में कॉलम होने चाहिए" को ठीक करें