【问题标题】:Does BigQuery support SubQueries?BigQuery 是否支持子查询?
【发布时间】:2016-05-12 12:57:08
【问题描述】:

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

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

BigQuery 是否支持此功能?

【问题讨论】:

  • 你试过运行它并检查结果是什么?

标签: sql google-bigquery


【解决方案1】:

您不需要子查询:

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

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

【讨论】:

  • 请注意,您可以使用常用的连接类型:内、左、右、外。
【解决方案2】:

是的,我记得做过类似的事情

SELECT a ,b
FROM Tablea
WHERE a not IN (SELECT a FROM Tableb)

【讨论】:

    【解决方案3】:

    首先让我们正式修复您的查询(假设您使用的是 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 旧版 SQL 支持非常有限地使用子查询 - 称为 table subquery - 在 FROM 和 FLATTEN 以及半或反半连接(只有一个字段)
    你可以在这里找到详细信息https://cloud.google.com/bigquery/query-reference

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-30
      • 2020-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多