Below example is for BigQuery Standard SQL
#standardSQL
SELECT
Field1, STRING_AGG(Field2) AS contained
FROM `table1`
JOIN `table2`
ON REGEXP_CONTAINS(Field1, Field2)
GROUP BY Field1
you can test / play with above using below dummy data
#standardSQL
WITH `table1` AS (
SELECT 'abc' Field1 UNION ALL
SELECT 'xyz'
),
`table2` AS (
SELECT 'a' Field2 UNION ALL
SELECT 'x' UNION ALL
SELECT 'y' UNION ALL
SELECT 'z'
)
SELECT
Field1, STRING_AGG(Field2) AS contained
FROM `table1`
JOIN `table2`
ON REGEXP_CONTAINS(Field1, Field2)
GROUP BY Field1
with result as
Field1 contained
abc a
xyz x,y,z
Second Option is more inline with your original expectation (in terms
of syntax pattern) but requires use of SQL UDF:
#standardSQL
CREATE TEMP FUNCTION Check_Contains(str STRING, arr ARRAY<STRING>) AS ((
SELECT STRING_AGG(item) AS contained
FROM UNNEST(arr) item
WHERE REGEXP_CONTAINS(str, item)
));
SELECT Field1,
Check_Contains(Field1, ARRAY(SELECT Field2 FROM `table2`)) AS contained
FROM `table1`
To test / play - you can use below
#standardSQL
CREATE TEMP FUNCTION Check_Contains(str STRING, arr ARRAY<STRING>) AS ((
SELECT STRING_AGG(item) AS contained
FROM UNNEST(arr) item
WHERE REGEXP_CONTAINS(str, item)
));
WITH `table1` AS (
SELECT 'abc' Field1 UNION ALL
SELECT 'xyz' UNION ALL
SELECT 'vwu'
),
`table2` AS (
SELECT 'a' Field2 UNION ALL
SELECT 'x' UNION ALL
SELECT 'y' UNION ALL
SELECT 'z'
)
SELECT Field1,
Check_Contains(Field1, ARRAY(SELECT Field2 FROM `table2`)) AS contained
FROM `table1`
with output as
Field1 contained
abc a
xyz x,y,z
vwu null
One more option (without UDF)
#standardSQL
SELECT Field1,
ARRAY_TO_STRING(REGEXP_EXTRACT_ALL(Field1, (SELECT STRING_AGG(Field2, '|') FROM `table2`)), ',') AS contained
FROM `table1`
you can use same dummy data as for above (first two options)