Sql 标准的BigQueryUnest和JOIN问题

Sql 标准的BigQueryUnest和JOIN问题,sql,google-bigquery,unnest,Sql,Google Bigquery,Unnest,我有一个基本的大问题,令人不安的连接问题 我有一个会话事件表和一个设置事件表。设置事件表有一个嵌套列,名为data 一旦我展平设置_event.data aka unnest,它的一列需要连接到会话事件表的一列 是否有办法将会话事件表直接连接到未列出的设置\u event.data?我试过做: 选择。。。。 来自会话\u事件 LEFT JOIN UNNEST[设置\u event.data] 但是,我收到一个未找到的设置事件 在标准的BQ SQL中如何执行此操作?您可以执行以下操作: SELEC

我有一个基本的大问题,令人不安的连接问题

我有一个会话事件表和一个设置事件表。设置事件表有一个嵌套列,名为data

一旦我展平设置_event.data aka unnest,它的一列需要连接到会话事件表的一列

是否有办法将会话事件表直接连接到未列出的设置\u event.data?我试过做:

选择。。。。 来自会话\u事件 LEFT JOIN UNNEST[设置\u event.data]

但是,我收到一个未找到的设置事件

在标准的BQ SQL中如何执行此操作?

您可以执行以下操作:

SELECT ....
FROM `project.dataset.SESSION_EVENTS`
LEFT JOIN (
  SELECT ....
  FROM `project.dataset.SETTING_EVENT`, UNNEST(data)
)
ON ... = ...
SELECT <FIELDS> FROM `<session_events>` 
LEFT JOIN
(SELECT <FIELDS> FROM `<setting_events>`, UNNEST(data)
)
ON <JOIN_CONDITION>
或:

在第二个选项中,您应该将t.data中的字段引用为d。
我希望它有帮助

这应该是你想要的:

SELECT ....
FROM SESSION_EVENTS sese LEFT JOIN 
     (SETTING_EVENT sete CROSS JOIN
      UNNEST(se.data) se_data
     ) 
     ON sese.? = se_data
这是一种解决方案,您不需要嵌套SELECT,从而列出所需的列

如果使用内部联接,我不会使用括号,而是更改表引用的顺序:

SELECT ....
FROM SETTING_EVENT sete CROSS JOIN
     UNNEST(se.data) se_data JOIN
     SESSION_EVENTS sese
     ON sese.? = se_data

当然可以加入-想留下更多细节来获得更具体的答案吗?@FelipeHoffa:lol更新
SELECT ....
FROM SETTING_EVENT sete CROSS JOIN
     UNNEST(se.data) se_data JOIN
     SESSION_EVENTS sese
     ON sese.? = se_data