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

jsonb एक सरणी में नेस्टेड वस्तुओं पर क्वेरी की तरह

आपके समाधान को कुछ और सरल बनाया जा सकता है:

SELECT r.res->>'name' AS feature_name, d.name AS detail_name
FROM   restaurants r
     , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
WHERE  d.name LIKE '%oh%';

या आसान, फिर भी, jsonb_array_elements() चूंकि आपको वास्तव में पंक्ति प्रकार की आवश्यकता नहीं है (foo ) इस उदाहरण में बिल्कुल:

SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
FROM   restaurants r
     , jsonb_array_elements(r.res #> '{payload, details}') d
WHERE  d->>'name' LIKE '%oh%';

dbfiddle यहां

लेकिन यह नहीं है आपने क्या पूछ बिल्कुल:

आप सभी JSON सरणी तत्वों (0-n प्रति आधार तालिका पंक्ति) को वापस कर रहे हैं, जहां एक विशेष कुंजी ('{payload,details,*,name}' ) मिलान (केस-संवेदी रूप से)।

और आपके मूल प्रश्न में इसके ऊपर एक नेस्टेड JSON सरणी थी। आपने इस समाधान के लिए बाहरी सरणी को हटा दिया - मैंने वही किया।

आपकी वास्तविक आवश्यकताओं के आधार पर नई टेक्स्ट खोज क्षमता पोस्टग्रेज 10 उपयोगी हो सकता है।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. django प्रोजेक्ट के साथ PostgreSQL की स्थापना

  2. तालिका हटाने के बाद रीसेट आईडी गिनती ()

  3. पोस्टग्रेएसक्यूएल ऑन द राइज:2018 पोस्टग्रेज फाइंडिंग्स और 2019 ट्रेंड्स

  4. हाइबरनेट एनोटेशन - केस असंवेदनशील UniqueConstraint

  5. पोस्टग्रेज़ में दिनांक समय को यूनिक्स युग मान में कैसे परिवर्तित करें?