Sql 连接从字符串列拆分的多个列上的两个表
我有两张桌子,第一张看起来像:Sql 连接从字符串列拆分的多个列上的两个表,sql,google-cloud-platform,google-bigquery,Sql,Google Cloud Platform,Google Bigquery,我有两张桌子,第一张看起来像: col1 col2 1 data1 v1|v2|v3 2 data2 v2|v4 3 data3 NULL 4 data4 v5 col_k col_v 1 k1 v1 2 k2 v2 3 k3 v3 4 k4 v4 5 k5 v5 第二个看起来像: col1 col2 1 data1 v1|v2|v3 2 data2 v2|v4 3 data
col1 col2
1 data1 v1|v2|v3
2 data2 v2|v4
3 data3 NULL
4 data4 v5
col_k col_v
1 k1 v1
2 k2 v2
3 k3 v3
4 k4 v4
5 k5 v5
第二个看起来像:
col1 col2
1 data1 v1|v2|v3
2 data2 v2|v4
3 data3 NULL
4 data4 v5
col_k col_v
1 k1 v1
2 k2 v2
3 k3 v3
4 k4 v4
5 k5 v5
现在我需要根据
ANY(table1.col2)=table2.colu v
合并它们,并且需要在googlebigquery上完成。解决办法是什么?我不知道它会是什么样子,它可能在一列中,即k1 | k2 | k3
,也可能在只包含一个键的多列中。欢迎任何意见 我将取消对连接的字符串的测试:
select t1.*, t2.*
from table1 t1 cross join
unnest(split(t1.col2, '|')) col join
table2 t2
on t2.col_v = col
我将取消对连接的字符串的测试
:
select t1.*, t2.*
from table1 t1 cross join
unnest(split(t1.col2, '|')) col join
table2 t2
on t2.col_v = col
下面是BigQuery标准SQL
#standardSQL
select col1,
any_value(col2) col2,
string_agg(col_k, '|' order by col_k) col3
from `project.dataset.table1`
left join unnest(split(col2, '|')) col_v
left join `project.dataset.table2`
using(col_v)
group by col1
如果将上述应用于您问题中的样本数据,则输出为
下面是BigQuery标准SQL
#standardSQL
select col1,
any_value(col2) col2,
string_agg(col_k, '|' order by col_k) col3
from `project.dataset.table1`
left join unnest(split(col2, '|')) col_v
left join `project.dataset.table2`
using(col_v)
group by col1
如果将上述应用于您问题中的样本数据,则输出为