如何将我的 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 执行连接操作。
我一直在尝试将我的 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 执行连接操作。