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

एक पोस्टग्रेज जेसन फ़ील्ड से एक सरणी को शामिल करने वाले सभी रिकॉर्ड्स का चयन कैसे करें?

ANY का उपयोग करें यह जांचने के लिए कि क्या jsonb सरणी में कोई है अपने sqlfiddle उदाहरण का उपयोग करके सही मानों का, जो एक सरणी या एक उपश्रेणी हो सकता है

SELECT *
FROM tableA
WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)

आप एक सरणी शाब्दिक भी पास कर सकते हैं, इस मामले में इसे JSONB मानों की एक सरणी की आवश्यकता होगी, अर्थात @> के दाईं ओर शाब्दिक ANY('{123,456}'::JSONB[]) से बदला जा सकता है

वैकल्पिक रूप से, && . का उपयोग करें सरणी ओवरलैप के लिए परीक्षण करने के लिए। JSON/JSONB सरणी को मूल सरणी में बदलना सबसे पहले आवश्यक है

SELECT tableA.*
FROM tableA 
JOIN LATERAL (
  SELECT ARRAY_AGG(v::INT) y 
  FROM JSONB_ARRAY_ELEMENTS_TEXT(data->'sequence') v
) x ON TRUE
WHERE x.y && '{123, 456}'

आप सरणी शाब्दिक '{123, 456}' . को भी बदल सकते हैं एक सबक्वेरी के साथ जो पूर्णांकों की एक सरणी देता है, जैसे (SELECT ARRAY_AGG(data_id) FROM tableB)

एक अन्य विकल्प यह होगा कि आप या आपके जहां क्लॉज का उपयोग करें

select *
from tableA 
where (data->'sequence') @> '[456]'
   or (data->'sequence') @> '[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. पोस्टजीआईएस इन एक्शन

  4. मैं रिकॉर्ड को चुनिंदा रूप से बहिष्कृत करने के लिए Redshift/Postgresql LAG विंडो फ़ंक्शन कैसे प्राप्त कर सकता हूं?

  5. क्या PostgreSQL सरणी को शामिल होने के लिए अनुकूलित किया जा सकता है?