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]'