我正在努力实现以下目标。假设我有两个表:
WITH table_1 as (
SELECT
* FROM UNNEST([
STRUCT([1] as A, [2,3,4] as B),
STRUCT([2],[6,7])
])
)
表 2:
WITH example as (
SELECT
* FROM UNNEST([
STRUCT([1,2] as C, [77] as D),
STRUCT([3,4],[88]),
STRUCT([4],[99])
])
)
我想根据以下条件合并table_1和table_2:C的所有值都必须在B中:
从 table_1 LEFT JOIN table_2 ON C CONTAINED IN B 中选择 A、C、D
这将产生下表:
我的问题是是否/如何才能获得期望的结果。我无法为两个数组编写 CONTAINED IN
语句作为 LEFT JOIN
语句的条件。另一项要求是表 1 包含 1 亿行,表 2 包含 25,000 行。因此,解决方案必须是有效的。我知道这增加了问题的难度......:P
我们将非常感谢您的帮助!
最佳答案
WITH table_1 as (
SELECT
* FROM UNNEST([
STRUCT([1] as A, [2,3,4] as B),
STRUCT([2],[6,7])
])
),
table_2 as (
SELECT
* FROM UNNEST([
STRUCT([1,2] as C, [77] as D),
STRUCT([3,4],[88]),
STRUCT([4],[99])
])
)
SELECT table_1.A, table_2.C, table_2.D
FROM table_1 , table_2 , UNNEST([
(SELECT ARRAY_LENGTH(table_2.C) - COUNT(1)
FROM UNNEST(table_2.C) AS col_c
JOIN UNNEST(table_1.B) AS col_b
ON col_c = col_b)]) AS x
WHERE x = 0
这会产生所需的输出。
关于sql - BigQuery 根据(Array CONTAINED IN Array)条件连接 2 个表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59967207/