【问题标题】:Update rows with multiple values from other table - BigQuery使用其他表中的多个值更新行 - BigQuery
【发布时间】:2018-10-16 05:36:27
【问题描述】:

我在Bigquery Table ATable B 中有两个表格。

表 A 有两列 - name(String) & value(Float)。名称列可以包含 null 值。

表 B 有 3 列 - start_value(Float)、end_value(FLoat) 和 name(String)。这 3 列不会为空。

我的目标是为 name 为空的行更新表 A。逻辑基本上是识别 name 为 null 的值,然后在表 B 中找到对应的行,其中

a.value >= b.start_value and a.value <= b.end_value

这样,我必须在单个查询中更新表 A 中的所有行。我怎样才能做到这一点?

注意:表 A 中没有两行是相同的。

【问题讨论】:

    标签: sql-update google-bigquery


    【解决方案1】:
    UPDATE `project.dataset.tableA` a 
    SET a.name = b.name
    FROM `project.dataset.tableB` b
    WHERE a.name IS NULL
    AND value BETWEEN start_value AND end_value
    

    【讨论】:

    • 所以,tableA 中没有符合您条件的行
    • 我有行!当我计算它为空的行时,我得到了一些价值
    • 但这不是唯一的标准——对吧?你也应该有有价值的东西
    • 总是 value 包含与 name 不同的非空值
    • 正确。并且tableB中应该有value BETWEEN start_value AND end_value的行
    【解决方案2】:

    这里有一个代码,在我这边可以完美运行:

    UPDATE `project.dataset.tableA` a
    SET a.name = (
          SELECT b.name
          FROM `project.dataset.tableB` b
          WHERE value BETWEEN start_value AND end_value)
    WHERE a.name IS NULL
    

    【讨论】:

      猜你喜欢
      • 2015-08-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-02
      • 2015-05-19
      • 1970-01-01
      • 2015-09-16
      相关资源
      最近更新 更多