sql >> データベース >  >> RDS >> PostgreSQL

JSON配列データフィールド内のデータのクエリ

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



    1. Macでpostgresqlをアンインストールする方法(Snow Leopardを実行)

    2. 降順からのMySQLの制限

    3. MySQLで複数の行を1つの列に連結する方法

    4. MySQLデータベースで同時クエリはどのように処理されますか?