BigQuery-使用JOIN中的SELECT进行更新时出现意外结果:匹配零行

时间:2019-05-25 21:42:33

标签: join google-bigquery sql-update standard-sql scalar-subquery

第一个问题StackOverflow,刚刚开始使用SQL和BigQuery。

在BigQuery上,我有一个包含一个表的项目:table
该表包含:
-一些数据x
-每个条目time的一些时间戳记,
-一些对条目进行分区的组标识符group
-和一个名为INTEGER的{​​{1}}列,其中包含所有rank值。

我想使用NULL更改以下UPDATE值:
NULL应该以{{1​​}}的升序(rank记录在组中最早的group}的基础上代表time的基础上rank=1中每一行的排名,x代表以下等)

这是我设置查询的方式:

rank=2

查询没有错误地执行,BigQuery告诉我所有行都按预期进行了修改。但是当我检查时,UPDATE project.table SET table.rank = ( WITH temp AS (select *, GENERATE_UUID() AS id FROM project.table), rank1 AS ( SELECT * , RANK() OVER(PARTITION BY group ORDER BY time ASC) AS rankvalue FROM temp ) SELECT rank1.rankvalue FROM temp INNER JOIN rank1 ON temp.id=rank1.id ) WHERE table.rank IS NULL 的值仍然是rank
由于我已经检查到NULL是否按预期生成,因此我猜测rankvalue语句中存在一些问题。
不过,我检查了JOIN确实确实从rank1继承了我创建的所有temp。所以我不明白为什么id失败。

替代:
我尝试了另一种方法: first JOIN分配了唯一的行标识符,称为table,然后使用以下查询:

id

但是此查询返回错误:UPDATE project.table SET table.rank = ( WITH rank1 AS ( SELECT * , RANK() OVER(PARTITION BY group ORDER BY time ASC) AS rankvalue FROM project.table ) SELECT rank1.rankvalue FROM project.table INNER JOIN rank1 ON table.id=rank1.id ) WHERE table.rank IS NULL 。我不明白为什么,因为我验证了WITH / SELECT / FROM子查询返回的行数与Scalar subquery produced more than one element中的行数完全相同。

非常感谢任何人。

更新:
我尝试了以下方法,并且有效:

table

这是我之前尝试过的第二种选择的修改。 问题:因为UPDATE project.table SET table.rank = ( WITH rank1 AS ( SELECT * , RANK() OVER( PARTITION BY group ORDER BY time AS ) AS rankvalue FROM project.table) SELECT rank1.rankvalue FROM rank1 WHERE table.id=rank1.id ) WHERE TRUE 会选择与正在进行更新的每个WHERE table.id=rank1.id对应的每个个人 table.id并将其与相应的{{1} }(也就是说,它在LHS中为LHS中的每一行选择一行),而table.rank将为rank.id的每个值返回整个联接表正在进行更新(即,LHS中的每一行在RHS上有多行)?

0 个答案:

没有答案