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