通过加入 BigQuery 进行更新
Update with join with BigQuery
是否可以基于与 BigQuery 中现有 table 的 JOIN 对 table 进行更新?
当我在以下数据库 (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
。我应该怎么做(如果可能的话)?
请参考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
,例如。
UPDATE `pfam31.uniprot` a
SET a.auto_architecture = b.auto_architecture
FROM `pfam31.uniprot_architecture` b
WHERE a.uniprot_acc = b.uniprot_acc
是否可以基于与 BigQuery 中现有 table 的 JOIN 对 table 进行更新?
当我在以下数据库 (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
。我应该怎么做(如果可能的话)?
请参考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
,例如。
UPDATE `pfam31.uniprot` a
SET a.auto_architecture = b.auto_architecture
FROM `pfam31.uniprot_architecture` b
WHERE a.uniprot_acc = b.uniprot_acc