问题描述
假设我有一个带有结构的表 events
:
id | value_array |
---|---|
XXXX | [a,b,c,d] |
... | ... |
我有第二个表 values_of_interest
的结构:
价值 |
---|
x |
y |
z |
一 |
我想找到具有在 values_of_interest
中找到的任何值的 ID。在其他条件相同的情况下,实现这一目标的性能最高的 SQL 是什么? (我正在使用 BigQuery,但可以更一般地回答)
我目前的想法是:
SELECT
DISTINCT e.id
FROM
events e,values_of_interest vi
WHERE
EXISTS(
SELECT
value
FROM
UNNEST(e.value_array) value
JOIN
vi ON vi.value = e.value
)
解决方法
BigQuery Standard SQL 的几个快速选项
选项 1
select id
from `project.dataset.events`
where exists (
select 1
from `project.dataset.values_of_interest`
where value in unnest(value_array)
)
选项 2
select id
from `project.dataset.events` t
where (
select count(1)
from t.value_array as value
join `project.dataset.values_of_interest`
using(value)
) > 0
,
我会用 exists
和 join
来写:
select e.id
from `project.dataset.events` e
where exists (select 1
from unnest(e.value_array) val join
`project.dataset.values_of_interest` voi
on val = voi.value
);