sql - 如何在 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”作为表,然后执行更新。这可以工作,但这是需要按计划频繁运行的东西,所以它不是最佳的。
解决方案
您可以将更新语句转换为以下
#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
推荐阅读
- java - Java查询数据类型&如何转换?
- python - 带有图像的 Tkinter Treeview:无效的状态名称 pyimage2
- python - 如何在 Python 中编写与 urllib.request.openurl 类似的代码
- android - 在android中打印Intent值时出错的日志语句
- php - PHP DOMDocument 文件名中带有 urlencoded 字符的困难
- java - 如何在不使用内置库方法的情况下对 ArrayList 进行排序?(爪哇)
- android - Android Studio 3.1.2 不断显示错误“请选择 Android SDK”
- postgresql - 许多 Postgres 进程可以使用相同的数据目录运行吗?
- javascript - 在选择一个选项时不发送文本框值
- firebase - FireBase Ping 延迟