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

PostgreSQLでJson配列から要素を取得する方法

    json []があるかどうかわかりません ( jsonのPostgreSQL配列 値)入力された列、または json タイプされた列。これはJSON配列のように見えます(例のように)。

    いずれの場合も、クエリを実行する前に配列を拡張する必要があります。 json []の場合 、 unnest(anyarray)> ; jsonのJSON配列の場合 入力した列には、 json_array_elements(json)<を使用する必要があります。 / code> (および LATERAL > 結合-私の例では暗黙的です):

    select     t.id,
               each_section ->> 'name' section_name,
               each_attribute ->> 'attrkey3' attrkey3
    from       t
    cross join unnest(array_of_json) each_section
    cross join json_array_elements(each_section -> 'attributes') each_attribute
    where      (each_attribute -> 'attrkey3') is not null; 
    -- use "where each_attribute ? 'attrkey3'" in case of jsonb
    
    
    select     t.id,
               each_section ->> 'name' section_name,
               each_attribute ->> 'attrkey3' attrkey3
    from       t
    cross join json_array_elements(json_array) each_section
    cross join json_array_elements(each_section -> 'attributes') each_attribute
    where      (each_attribute -> 'attrkey3') is not null;
    

    SQLFiddle

    残念ながら、データでインデックスを使用することはできません。そのためには、最初にスキーマを修正する必要があります。



    1. MySQLJSON_EXTRACTパス式エラー

    2. 複数のアレイを並列にネスト解除します

    3. 拡張機能mysqliがありません、phpmyadminが機能しません

    4. 同じクエリで投稿とタグをクエリする