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 (...)
と書くことができると期待します ただし、残念ながら、配列入力がないとサポートされません。驚いたことに、どちらも'123' IN (...)
ではありません 、修正する必要があると思うもの。
したがって、LATERAL
を使用します 。複数の一致がある場合に会社IDを複数回返す1つの方法は次のとおりです。
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';