BigQuery 数组 - 检查数组是否包含特定值

use*_*505 3 google-bigquery google-cloud-platform

我正在尝试查看 BigQuery 数组中是否存在某组项目。

下面的查询有效(检查数组中是否存在 1 项):

WITH sequences AS
(
    SELECT 1 AS id, [10,20,30,40] AS some_numbers
        UNION ALL 
    SELECT 2 AS id, [20,30,40,50] AS some_numbers
        UNION ALL 
    SELECT 3 AS id, [40,50,60,70] AS some_numbers
)
SELECT id, some_numbers 
FROM sequences 
WHERE 20 IN UNNEST(some_numbers)
Run Code Online (Sandbox Code Playgroud)

我无法执行的操作如下(检查数组中是否存在超过 1 个项目):

(此查询错误)

WITH sequences AS
(
    SELECT 1 AS id, [10,20,30,40] AS some_numbers
        UNION ALL 
    SELECT 2 AS id, [20,30,40,50] AS some_numbers
        UNION ALL 
    SELECT 3 AS id, [40,50,60,70] AS some_numbers
)
SELECT id, some_numbers 
FROM sequences 
WHERE (20,30) IN UNNEST(some_numbers)
Run Code Online (Sandbox Code Playgroud)
我设法找到以下解决方法,但我觉得有更好的方法来做到这一点:
WITH sequences AS
(
    SELECT 1 AS id, [10,20,30,40] AS some_numbers
        UNION ALL 
    SELECT 2 AS id, [20,30,40,50] AS some_numbers
        UNION ALL 
    SELECT 3 AS id, [40,50,60,70] AS some_numbers
)

SELECT id, some_numbers  
FROM  sequences
WHERE (
    
    ( 
        SELECT COUNT(1)
        FROM UNNEST(some_numbers) s
        WHERE s in (20,30)
    ) > 1
)
Run Code Online (Sandbox Code Playgroud)

任何建议表示赞赏。

Ser*_*ron 5

没有太多建议...官方文档建议使用exists

WHERE EXISTS (SELECT *
              FROM UNNEST(some_numbers) AS s
              WHERE s in (20,30));
Run Code Online (Sandbox Code Playgroud)