在我的SQL FROM子句中,我想通过子查询使用动态创建的表:
Select A.Field1,B.Field2
FROM TableA as A, (select Field1,Field2 from TableB) B
Where A.Field1 = B.Field1
BigQuery是否支持此功能?
答案 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中