52529


対象はGooleCloudBigqueryですが、Postgres等Arrayを持っているDBも同様と思います

id:1, arr_val: [{"a":"111"},{"a":"222"},{"a":"333"}]  
id:2, arr_val: [{"a":"222"},{"a":"444"},{"a":"666"}]  
・・・

といったデータ構造の時に  
"a"が111と222両方を含む要素を持ったレコードを抽出したいです。  
(例の場合id1のレコードが引っかかるようにしたいです。)

[code]

      SELECT
        arr_val
      FROM
        `テーブル名`,
        UNNEST(arr_val) AS line
      WHERE
        REGEXP_CONTAINS(line.a, r"正規表現") )  #条件1
        and
        REGEXP_CONTAINS(line.a, r"正規表現") )  #条件2
    
[/code]

の様にやってみましたが、条件が一つの時はそれぞれうまく行きますが  
AND条件とすると検索結果が0となってしまいました。


CC BY-SA 4.0
2019-02-01T13:30:48.773
52486
2019-02-04T06:33:19.103
23189
question
sql postgresql google-bigquery
配列の中に複数の条件全てみたすレコードを抽出する


SO本家の方で回答頂きましたので転記いたします。  
<https://stackoverflow.com/questions/54481011/how-to-extract-record-using-
multiple-filter-to-array>

* * *

Below is for BigQuery Standard SQL

# standardSQL

[code]

    SELECT id, arr_val
    FROM `project.dataset.table` t
    WHERE 2 = (SELECT COUNT(DISTINCT a) FROM t.arr_val line WHERE a IN (111, 222))
    
[/code]


CC BY-SA 4.0
2019-02-04T04:35:52.043
52529
2019-02-04T06:33:19.103
2020-06-17T08:14:45.997
-1
23189
52486
answer