问题
Is there a way to make this clause more compact?
SELECT campaign
,event_list
FROM `adobe_analytics.raw_data_20200*`
WHERE campaign IS NOT NULL -- What does it mean when a campaign is null in Adobe_analytics
AND
(
"1" IN UNNEST(split(event_list,","))
OR "2" IN UNNEST(split(event_list,","))
OR "3" IN UNNEST(split(event_list,","))
)
Something like :
SELECT campaign
,event_list
FROM `adobe_analytics.raw_data_20200*`
WHERE campaign IS NOT NULL
AND ("1" OR "2" OR "3") IN UNNEST(split(event_list,","))
回答1:
I would use exists
:
SELECT campaign, event_list
FROM `adobe_analytics.raw_data_20200*` rd
WHERE campaign IS NOT NULL AND
EXISTS (SELECT 1
FROM UNNEST(SPLIT(rd.event_list)) el
WHERE el IN ('1', '2', '3')
);
回答2:
Below is for BigQuery Standard SQL
SELECT campaign ,event_list
FROM `adobe_analytics.raw_data_20200*`
WHERE campaign IS NOT NULL
AND (
SELECT COUNT(1) FROM UNNEST(SPLIT(event_list,",")) e
JOIN UNNEST(SPLIT("1,2,3",",")) e USING(e)
) > 0
来源:https://stackoverflow.com/questions/65635224/how-to-check-if-several-values-are-in-a-list-in-bigquery