आपकी क्वेरी करीब है। json_each()
प्रमुख कार्य है। या jsonb_each()
jsonb
. के लिए . कुछ सुधार:
SELECT *
FROM things t
WHERE EXISTS (
SELECT FROM json_each(t.blueprint) b
WHERE b.value->>'name' ILIKE 'azamund'
);
पुराना sqlfiddle
db<>fiddle यहां
-
json_each()
json
. के रूप में पहले से ही मान लौटाता है डेटा प्रकार। अतिरिक्त कलाकारों की आवश्यकता नहीं है। -
बेहतर है, फिर भी,
LATERAL
का उपयोग करेंEXISTS
. में संदर्भ . यहSELECT
. में सेट-रिटर्निंग फ़ंक्शन के साथ अननेस्टिंग की तुलना में कहीं अधिक स्वच्छ है सूची। संबंधित: -
ILIKE
Use का प्रयोग करें (~~*
) पैटर्न मैच के लिए। रेगुलर एक्सप्रेशन से मेल खाता है (~
,~*
) अधिक शक्तिशाली हैं, लेकिन अधिक महंगे भी हैं। तो बुनियादीLIKE
. का उपयोग करें /ILKE
जहां तुम कर सकते हो। विवरण:
JSON सरणी के साथ वैकल्पिक
आपने JSON सरणियों के लिए मेरा संबंधित उत्तर पहले ही देख लिया है:
जबकि नेस्टेड JSON ऑब्जेक्ट्स के लिए क्वेरी उतनी ही सरल लगती है, बेहतर इंडेक्स सपोर्ट . है सरणी के लिए:
Postgres 12 में SQL/JSON के साथ सरल/अधिक कुशल हो सकता है ...