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

配列を含むpostgresjsonフィールドから特定の値を含むすべてのレコードを選択する方法

    ANYを使用する jsonb配列にanyが含まれているかどうかをテストします sqlfiddleの例を使用して、配列またはサブクエリの正しい値を選択します。

    SELECT *
    FROM tableA
    WHERE (data->'sequence') @> ANY(SELECT (data_id::TEXT)::JSONB FROM tableB)
    

    配列リテラルを渡すこともできます。この場合、JSONB値の配列、つまり@>の右側が必要になります。 リテラルANY('{123,456}'::JSONB[])に置き換えることができます

    または、&&を使用します アレイのオーバーラップをテストします。まず、JSON/JSONB配列をネイティブ配列に変換する必要があります

    SELECT tableA.*
    FROM tableA 
    JOIN LATERAL (
      SELECT ARRAY_AGG(v::INT) y 
      FROM JSONB_ARRAY_ELEMENTS_TEXT(data->'sequence') v
    ) x ON TRUE
    WHERE x.y && '{123, 456}'
    

    配列リテラル'{123, 456}'を置き換えることもできます (SELECT ARRAY_AGG(data_id) FROM tableB)などの整数の配列を返すサブクエリを使用します。

    別のオプションは、またはwhere句で使用することです

    select *
    from tableA 
    where (data->'sequence') @> '[456]'
       or (data->'sequence') @> '[123]'
    



    1. pg_config、ruby pg、アップグレード後のpostgresql 9.0の問題、centos 5

    2. PerconaXtraDBクラスターのProxySQLを使用した負荷分散

    3. OracleクエリをMySQLクエリに変換する

    4. SQLクエリ複数のランク/グループから最初のランク1行を選択します