带有 CTE 的 BigQuery UPDATE 语句
BigQuery UPDATE statement with CTEs
寻求有关 BigQuery 的帮助。
我似乎无法在 UPDATE 语句中使用 CTE,即:
with ctename as
(select
column1,
column2,
column3,
from blah)
update table2
set table2.column2 = ctename.column2
from table2
inner join ctename
on ctename.column1 = table2.column1
我找不到任何理由说明为什么这在 BigQuery 中不起作用。任何 help/advice 将不胜感激。
您可以尝试在 CTE 中使用 SELECT
查询和 JOIN
,如下所示:
with cte as
(select
blah.column1,
blah.column2,
blah.column3,
table2.column2 as t2col2
from blah
inner join table2
on blah.column1 = table2.column1)
update cte
set t2col2= column2;
我认为 BigQuery 不支持更新中的 CTE。您可以将此逻辑写为:
update table2
set table2.column2 = (select blah.column2 from blah where blah.column1 = table2.column1)
where exists (select blah.column2 from blah where blah.column1 = table2.column1);
下面看起来等同于您要实现的目标,同时在技术上保留了您的 cte 查询(这显然比 select * 从废话中复杂得多)
update table2
set column2 = ctename.column2
from (
select column1, column2, column3
from blah
) ctename
where ctename.column1 = table2.column1
注意:因为它隐含地来自您的问题和其他答案 - 预计第 1 列有 1:1 个匹配 - 否则你会得到错误
寻求有关 BigQuery 的帮助。
我似乎无法在 UPDATE 语句中使用 CTE,即:
with ctename as
(select
column1,
column2,
column3,
from blah)
update table2
set table2.column2 = ctename.column2
from table2
inner join ctename
on ctename.column1 = table2.column1
我找不到任何理由说明为什么这在 BigQuery 中不起作用。任何 help/advice 将不胜感激。
您可以尝试在 CTE 中使用 SELECT
查询和 JOIN
,如下所示:
with cte as
(select
blah.column1,
blah.column2,
blah.column3,
table2.column2 as t2col2
from blah
inner join table2
on blah.column1 = table2.column1)
update cte
set t2col2= column2;
我认为 BigQuery 不支持更新中的 CTE。您可以将此逻辑写为:
update table2
set table2.column2 = (select blah.column2 from blah where blah.column1 = table2.column1)
where exists (select blah.column2 from blah where blah.column1 = table2.column1);
下面看起来等同于您要实现的目标,同时在技术上保留了您的 cte 查询(这显然比 select * 从废话中复杂得多)
update table2
set column2 = ctename.column2
from (
select column1, column2, column3
from blah
) ctename
where ctename.column1 = table2.column1
注意:因为它隐含地来自您的问题和其他答案 - 预计第 1 列有 1:1 个匹配 - 否则你会得到错误