如何使用多个过滤器提取记录到数组

时间:2019-02-01 13:58:29

标签: sql google-bigquery

GoogleCloudBigquery上有一个如下表。

id:1, arr_val: [{"a":"111"},{"a":"222"},{"a":"333"}]
id:2, arr_val: [{"a":"000"},{"a":"222"},{"a":"333"}]
id:2, arr_val: [{"a":"111"},{"a":"444"},{"a":"555"}]
...

我要搜索具有{“ a”:111}和{“ a”:222}的记录。

在上面的示例中,我希望提取id1。

我在下面尝试过

SELECT
  arr_val
FROM
  "TableName",
  UNNEST(arr_val) AS line
WHERE
  REGEXP_CONTAINS(line.a, r"....") )
and
  REGEXP_CONTAINS(line.a, r"....") )

如果WHERE条件是一个条件,则每个查询都起作用。

但是,当WHERE条件为2时,它不能很好地工作。

1 个答案:

答案 0 :(得分:1)

以下是用于BigQuery标准SQL

#standardSQL
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))