BigQuery是否支持SubQueries?

时间:2013-08-10 20:40:05

标签: sql google-bigquery

在我的SQL FROM子句中,我想通过子查询使用动态创建的表:

Select A.Field1,B.Field2
FROM TableA as A, (select Field1,Field2 from TableB) B
Where A.Field1 = B.Field1

BigQuery是否支持此功能?

3 个答案:

答案 0 :(得分:3)

您不需要子查询:

Select A.Field1,B.Field2
FROM TableA as A join
     TableB as B
     on A.Field1 = B.Field1;

但是,根据reference manual,BigQuery确实支持子查询。

答案 1 :(得分:0)

是的,我记得做过像

这样的事情
SELECT a ,b
FROM Tablea
WHERE a not IN (SELECT a FROM Tableb)

答案 2 :(得分:0)

首先让我们正式修复您的查询(假设您使用的是BigQuery Legacy SQL) 请注意,在Legacy SQL中,逗号不是用作JOIN而是用作UNION ALL

所以你查询,工作,应该如下所示

SELECT A.Field1, B.Field2
FROM TableA AS A 
JOIN (SELECT Field1, Field2 FROM TableB) AS B
ON A.Field1 = B.Field1

当然在您的特定示例中,您不需要进行子选择,但我认为这只是简化示例,因此我不会朝着这个方向前进,其他答案已经指向了这个

最后,关于BigQuery中的子查询
BigQuery Legacy SQL支持非常有限的子查询使用 - 在FROM和FLATTEN中称为table subquery - 半连接或反半连接(只有一个字段)
您可以在https://cloud.google.com/bigquery/query-reference

找到详细信息

另一方面,BigQuery Standard SQL为子查询提供了扩展支持 - 用于表子查询以及表达式子查询
你可以在这里看到更多https://cloud.google.com/bigquery/sql-reference/query-syntax#subqueries 注意:BigQuery标准SQL版本在Alpha中