【问题标题】:Update with join with BigQuery通过 BigQuery 加入更新
【发布时间】:2018-05-02 14:17:35
【问题描述】:
是否可以基于 JOIN 与 BigQuery 中的现有表对表执行更新?
当我在以下数据库 (https://bigquery.cloud.google.com/dataset/pfamdb:pfam31) 上尝试此语句时,
UPDATE pfam31.uniprot
SET uniprot.auto_architecture = uniprot_architecture.auto_architecture
INNER JOIN
pfam31.uniprot_architecture using(uniprot_acc)
我收到与 INNER JOIN 相关的错误,而应使用 WHERE。我应该怎么做(如果可能的话)?
【问题讨论】:
标签:
join
sql-update
google-bigquery
bigquery-standard-sql
【解决方案1】:
请参考UPDATE statement syntax。甚至还有一个关于 UPDATE with JOIN 的示例。您需要使用 FROM 子句,并且您的查询应该是这样的:
UPDATE pfam31.uniprot
SET uniprot.auto_architecture =
(SELECT uniprot_architecture.auto_architecture
FROM pfam31.uniprot_architecture
WHERE uniprot.uniprot_acc = auto_architecture.uniprot_acc);
这假定表中的 uniprot_acc 值之间存在 1:1 的关系。如果不是这种情况,您将需要使用 LIMIT 1,例如。
【解决方案2】:
UPDATE `pfam31.uniprot` a
SET a.auto_architecture = b.auto_architecture
FROM `pfam31.uniprot_architecture` b
WHERE a.uniprot_acc = b.uniprot_acc