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

配列内のネストされたオブジェクトに対するjsonbLIKEクエリ

    ソリューションをさらに簡素化できます:

    SELECT r.res->>'name' AS feature_name, d.name AS detail_name
    FROM   restaurants r
         , jsonb_populate_recordset(null::foo, r.res #> '{payload, details}') d
    WHERE  d.name LIKE '%oh%';
    

    または、もっと簡単ですが、 jsonb_array_elements() 実際には行タイプ(fooは必要ないため) )この例ではまったく:

    SELECT r.res->>'name' AS feature_name, d->>'name' AS detail_name
    FROM   restaurants r
         , jsonb_array_elements(r.res #> '{payload, details}') d
    WHERE  d->>'name' LIKE '%oh%';
    

    dbfiddle こちら

    しかし、それはではありません 質問 正確に:

    すべてのJSON配列要素(ベーステーブル行ごとに0〜n)を返します。ここで、1つの特定のキー('{payload,details,*,name}' )一致します(大文字と小文字を区別します)。

    そして、元の質問には、この上にネストされたJSON配列がありました。このソリューションの外部アレイを削除しました-私も同じことをしました。

    実際の要件に応じて、新しいテキスト検索機能Postgres10の 役に立つかもしれません。



    1. SQLがテーブルを作成できません(errno:150)

    2. mysqlの既存の行の列の値に1を追加する方法

    3. UTF-8:一般ですか?置き場? Unicode?

    4. 前/次のボタン?