I’m trying to join array elements in BigQuery but I am getting the following error message:
Correlated subqueries that reference other tables are not supported unless they can be de-correlated, such as by transforming them into an efficient JOIN.
In my first table I have something like:
field1 | field2 | some_list
Elements in some_list have ids and other data and I’d like to enrich each element from some_list with some fields from a different table (they may exist or not).
I’ve tried to unnest some_list and left join with a different table on id but it seems it’s not allowed.
Any ideas how I can do it? Thanks!
First table:
x
day city orders.id orders.address
14-06-2021 London 1 abc
2 def
3 ghi
14-06-2021 Bristol 4 sfd
5 sds
Second table:
order.id order.weight
1 10
2 12
3 35
5 31
Expected result:
day city orders.id orders.address orders.weight
14-06-2021 London 1 abc 10
2 def 12
3 ghi 35
14-06-2021 Bristol 4 sfd NULL
5 sds 31
Advertisement
Answer
Consider below generic solution
select any_value(t1).* replace(
array_agg((select as struct t.*, `order`.weight)) as orders
)
from first_table t1, t1.orders t
left join second_table t2
on id = `order`.id
group by to_json_string(t1)
if applied to sample data in your question – output is