如何将我的 SELECT INNER JOIN 转换为 UPDATE

How can I turn my SELECT INNER JOIN into an UPDATE

我一直在尝试将我的 SELECT INNER JOIN 转换为 UPDATE。 我在 BigQuery 中进行的查询如下:

SELECT tt.*
FROM `table` tt
INNER JOIN
    (SELECT c_id, MIN(c_orderid) as OrderID, MIN(c_orderdate) AS MinDateTime
    FROM `table`
    GROUP BY c_id) groupedtt 
ON tt.c_orderid = groupedtt.OrderID
AND tt.c_orderdate = groupedtt.MinDateTime

我想将此查询转换为更新 c_first_sale 并将其设置为 TRUE

我提出的查询是:

UPDATE `table` tt
SET tt.c_first_sale = TRUE
FROM `table` as dd
INNER JOIN
    (SELECT c_id, MIN(c_orderid) as OrderID, MIN(c_orderdate) AS MinDateTime
    FROM `table`
    GROUP BY c_id) groupedtt 
ON dd.c_orderid = groupedtt.OrderID
AND dd.c_orderdate = groupedtt.MinDateTime
WHERE 1 = 1

但这给了我以下错误

UPDATE/MERGE must match at most one source row for each target row

我觉得我已经很接近了,但是我卡在了这个上面。

如@Pale 所述,当您尝试更新 table 时会发生此错误,方法是使用此 documentation 中给出的 FROM 子句中的多行更新连接。您可以创建一个单独的临时 table,使用 ID 列执行分组并将值导出到临时 table。使用 ID 列对 table 执行连接操作。