首页 > 解决方案 > 如何在 BigQuery 中加入 CTE 结果时更新表?

问题描述

我认为通过这个简化的示例(在 PostgreSQL 中工作)可以很明显地看到我正在尝试做什么......

with a as
(
    select 1 as id, 123.456 as value
)
update 
    mytable 
    set value = coalesce(a1.value, a2.value) 
from 
    a as a1, 
    a as a2 
where 
    a1.id = mytable.id 
or 
    a2.id = mytable.id2

这是一个简化的例子。实际上,“a”表达式非常复杂,我需要在更新表达式中多次加入它。有没有办法在 BigQuery 的一个语句中做到这一点?

现在,我看到的唯一选择是首先在单独的查询中创建“a”作为表,然后执行更新。这可以工作,但这是需要按计划频繁运行的东西,所以它不是最佳的。

标签: sqlgoogle-bigquery

解决方案


您可以将更新语句转换为以下

#standardSQL
UPDATE 
  `project.dataset.mytable` mytable 
  SET value = new_value 
FROM (
  WITH a AS
  (
    SELECT 1 AS id, 123.456 AS value
  )  
  SELECT a1.id a1_id, a2.id a2_id, 
    COALESCE(a1.value, a2.value) new_value
  FROM 
    a AS a1, 
    a AS a2 
)
WHERE 
  a1_id = mytable.id 
OR 
  a2_id = mytable.id2

推荐阅读